使用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 相关文章推荐
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 Javascript
浅析jQuery中常用的元素查找方法总结
Jul 04 Javascript
javascript显示用户停留时间的简单实例
Aug 05 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
详解AngularJS中的http拦截
Feb 09 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
微信小程序 开发经验整理
Feb 15 Javascript
layui实现table加载的示例代码
Aug 14 Javascript
webpack是如何实现模块化加载的方法
Nov 06 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 16 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中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php链表用法实例分析
2015/07/09 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
200 行python 代码实现 2048 游戏
2018/01/12 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
python实现简单多人聊天室
2018/12/11 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
聘用意向书范本
2014/04/01 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
python中filter,map,reduce的作用
2022/06/10 Python