使用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 相关文章推荐
分享XmlHttpRequest调用Webservice的一点心得
Jul 20 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
JavaScript中数组成员的添加、删除介绍
Dec 30 Javascript
javascript如何操作HTML下拉列表标签
Aug 20 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
Sep 06 Javascript
AngularJS自定义控件实例详解
Dec 13 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
Jul 13 Javascript
纯JS实现可用于页码更换的飞页特效示例
May 21 Javascript
详解如何理解vue的key属性
Apr 14 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
Feb 24 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导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
jquery 事件执行检测代码
2009/12/09 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
JS 事件绑定函数代码
2010/04/28 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
js实现内置计时器
2019/12/16 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
python初步实现word2vec操作
2020/06/09 Python
python中取绝对值简单方法总结
2020/07/24 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
2014社区三八妇女节活动总结
2014/03/01 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
老龙头导游词
2015/02/11 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
Python实现天气查询软件
2021/06/07 Python
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技