使用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 相关文章推荐
Javascript Jquery 遍历Json的实现代码
Mar 31 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
Sep 17 Javascript
javascript返回顶部的按钮实现方法
Jan 09 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
Jan 22 Javascript
JavaScript知识点总结(十)之this关键字
May 31 Javascript
深入解析Javascript闭包的功能及实现方法
Jul 10 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
js的三种继承方式详解
Jan 21 Javascript
react实现换肤功能的示例代码
Aug 14 Javascript
Angular8路由守卫原理和使用方法
Aug 29 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 Javascript
详解JS数组方法
Nov 20 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将数据库导出成excel的方法
2010/05/07 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
python基于pyDes库实现des加密的方法
2017/04/29 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
2014两会优秀的心得体会范文
2014/03/17 职场文书
优秀团员个人总结
2015/02/26 职场文书
财务个人年度总结范文
2015/02/26 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
使用MybatisPlus打印sql语句
2022/04/22 SQL Server