使用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中的事件
Sep 23 Javascript
获取3个数组不重复的值的具体实现
Dec 30 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
Jun 09 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
js实现下拉列表选中某个值的方法(3种方法)
Dec 17 Javascript
bootstrap输入框组件使用方法详解
Jan 19 Javascript
详谈jQuery.load()和Jsp的include的区别
Apr 12 jQuery
vue之nextTick全面解析
May 17 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
JS数组操作中的经典算法实例讲解
Jul 26 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
JavaScript实现打字游戏
Feb 19 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
nodejs aes 加解密实例
2018/10/10 NodeJs
详解小程序退出页面时清除定时器
2019/04/28 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
django中模板的html自动转意方法
2018/05/27 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
python中的列表与元组的使用
2019/08/08 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
教师节商场活动方案
2014/02/13 职场文书
务虚会发言材料
2014/12/25 职场文书
社区义诊通知
2015/04/24 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书