使用node.js搭建服务器


Posted in Javascript onMay 20, 2017

使用node搭建小型服务器(其实就是分析url然后输出文件给客户端)

最近需要完成一个课程设计,被项目经理(组长)分配写界面,但是总觉得只写前端的话缺了点什么,所以想自己写下后端玩一下。

期间还稍微纠结了一下用什么语言,本来打算正好学习一下PHP,可后来转念一想,用nodejs岂不美哉,不仅了解了后台开发,也相当于巩固了js基础,一举两得,美滋滋。

在学习node的过程中,学到了使用node实现一个服务器这一块,感觉是对前面所学模块的一个很好的总结。用到了四个基本的模块fs stream http path

代码如下:(内含蹩脚英文注释请见谅)

'use strict'
var url = require('url');
var path = require('path');
var fs = require('fs');
var http = require('http');
//get the current path
//var root = path.resolve('.');//以当前的目录为服务器的根目录
var root = path.resolve(process.argv[2] || '.');//以输入的参数作为服务器的根目录,如果没有输入参数就将当前目录作为服务器根目录
console.log('local root dir :' + root);
//create server
var server = http.createServer(function(request, response) {
  //get the path of URL
  var pathname = url.parse(request.url).pathname;
  //get the local path
  var filepath = path.join(root, pathname);
  //get the file stat and output the request file by callback function
  fs.stat(filepath, function(err, stat) {
    if(!err && stat.isFile()) {
      console.log('200' + request.url);
      response.writeHead(200);
      fs.createReadStream(filepath).pipe(response);//没有必要手动读取文件内容。由于response对象本身是一个Writable Stream,直接用pipe()方法就实现了自动读取文件内容并输出到HTTP响应。
    } else {
      console.log('404' + request.url);
      response.writeHead(404);
      response.end('404 Not Found');
    }
  });
});
server.listen(8080);
console.log('Server is running at http://127.0.0.1:8080/');

对于其中一些函数的解释:

path.resolve() 路径寻航(这名字不错)
path.resolve([from…], to)

有个解释很有趣:相当于不断地调用系统的cd指令

eg:

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')
//相当于:
cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile1
path.join([path1],path[2]...) 路径合并

将所有名称用path.seq串联起来,然后用normailze格式化

eg:

path.join('///foo', 'bar', '//baz/asdf', 'quux', '..');
=>'/foo/bar/baz/asdf'

既然提到了normalize

那么:

格式化路径 path.normalize(p)
将不符合规范的路径格式化,简化开发人员中处理各种复杂的路径判断

eg:

path.normalize('/foo/bar//baz/asdf/quux/..');
=> '/foo/bar/baz/asdf'

http.response.end()结束相应,告诉客户端所有消息已经发送。当所有要返回的内容发送完毕时,该函数必须要被调用一次。如果不调用该函数,那么客户端将会永远处于等待状态。

使用方法:

response.end([data], [encoding])

data end()执行完毕后要输出的字符,如果指定了 data 的值,那就意味着在执行完 response.end() 之后,会接着执行一条 response.write(data , encoding);

encoding 对应data的字符编码

以上所述是小编给大家介绍的使用node.js搭建服务器的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS简单实现String转Date的方法
Mar 02 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
jquery.validate表单验证插件使用方法解析
Nov 07 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 jQuery
JavaScript判断输入是否为数字类型的方法总结
Sep 28 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
Apr 18 Javascript
使用JavaScript生成罗马字符的实例代码
Jun 08 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
Vue中CSS动画原理的实现
Feb 13 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
Nov 19 Javascript
js实现圆形菜单选择器
Dec 03 Javascript
layui表格实现代码
May 20 #Javascript
微信小程序新增的拖动组件movable-view使用教程
May 20 #Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
May 20 #jQuery
深入理解Angularjs中$http.post与$.post
May 19 #Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 #jQuery
EasyUI Datebox 日期验证之开始日期小于结束时间
May 19 #Javascript
javascript 开发之百度地图使用到的js函数整理
May 19 #Javascript
You might like
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
PHP实现简单登录界面
2019/10/23 PHP
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python语言描述随机梯度下降法
2018/01/04 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
大四学年自我鉴定
2013/11/13 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
司机检讨书
2014/02/13 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
担保书范本
2015/01/20 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
Elasticsearch 索引操作和增删改查
2022/04/19 Python