使用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实现异步刷新的代码(转载)
Mar 29 Javascript
javascript自适应宽度的瀑布流实现思路
Feb 20 Javascript
JS批量操作CSS属性详细解析
Dec 16 Javascript
让table变成exls的示例代码
Mar 24 Javascript
判断iframe里的页面是否加载完成
Jun 06 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
Feb 25 Javascript
基于jquery实现瀑布流布局
Jun 28 Javascript
javascript中JSON.parse()与eval()解析json的区别
May 19 Javascript
详解JavaScript模块化开发
Dec 04 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
Mar 27 jQuery
一份超级详细的Vue-cli3.0使用教程【推荐】
Nov 15 Javascript
layui动态加载多表头的实例
Sep 05 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邮件专题
2006/10/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
javascript Excel操作知识点
2009/04/24 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
JS实现图片切换特效
2019/12/23 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
用python写测试数据文件过程解析
2019/09/25 Python
python和php学习哪个更有发展
2020/06/17 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
英国著名的药妆网站:Escentual
2016/07/29 全球购物
校园新闻广播稿
2014/01/10 职场文书
广告业务员岗位职责
2014/02/06 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
班委竞选稿范文
2015/11/21 职场文书