使用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判断浏览器的比较全的代码
Feb 13 Javascript
JavaScript 闭包深入理解(closure)
May 27 Javascript
jquery 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
一个可拖拽列宽表格实例演示
Nov 26 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
Javascript控制input输入时间格式的方法
Jan 28 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
基于jquery实现最简单的选项卡切换效果
May 08 Javascript
基于bootstrap实现收缩导航条
Mar 17 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
Vue学习之路之登录注册实例代码
Jul 06 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 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(4) php 函数 补充2
2010/02/15 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
Python科学计算之NumPy入门教程
2017/01/15 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
车间调度岗位职责
2013/11/30 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
班主任新年寄语
2014/04/04 职场文书
教师对学生的评语
2014/04/28 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
python代码实现备忘录案例讲解
2021/07/26 Python