使用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实现DIV的一些简单控制
Jun 04 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
Aug 27 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
bootstrap table复杂操作代码
Nov 01 Javascript
AngularJS递归指令实现Tree View效果示例
Nov 07 Javascript
浅谈JavaScript的计时器对象
Dec 26 Javascript
canvas学习之API整理笔记(二)
Dec 29 Javascript
jQuery实现页面顶部下拉广告
Dec 30 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
Vue配合iView实现省市二级联动的示例代码
Jul 27 Javascript
vue $set 给数据赋值的实例
Nov 09 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
扩展你的 PHP 之入门篇
2006/12/04 PHP
PHP下几种删除目录的方法总结
2007/08/19 PHP
PHP实现图片旋转效果实例代码
2014/10/01 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
vue.js实现简单购物车功能
2020/05/30 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
python利用sklearn包编写决策树源代码
2017/12/21 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
大学生的创业计划书就该这么写
2014/01/30 职场文书
期中考试反思800字
2014/05/01 职场文书
婚礼答谢词
2015/01/04 职场文书
大学辅导员述职报告
2015/01/10 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
九年级语文教学反思
2016/03/03 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
nginx+lua单机上万并发的实现
2021/05/31 Servers
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL