使用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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
ExtJS 简介 让你知道extjs是什么
Dec 29 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
Sep 12 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
Jul 04 Javascript
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
jquery实现的一个简单进度条效果实例
May 12 Javascript
详解AngularJS中自定义指令的使用
Jun 17 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
Nov 12 Javascript
jQuery获取随机颜色的实例代码
May 21 jQuery
深入浅析angular和vue还有jquery的区别
Aug 13 jQuery
vue动态配置模板 'component is'代码
Jul 04 Javascript
vue 实现Web端的定位功能 获取经纬度
Aug 08 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
用Socket发送电子邮件
2006/10/09 PHP
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
php学习之流程控制实现代码
2011/06/09 PHP
那些年一起学习的PHP(二)
2012/03/21 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
详解如何webpack使用DllPlugin
2018/09/30 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
python简易远程控制单线程版
2018/06/20 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
乡镇保密工作责任书
2014/07/28 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
世界气象日活动总结
2015/02/27 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
火烧圆明园观后感
2015/06/03 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL