使用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 相关文章推荐
推荐40个简单的 jQuery 导航插件和教程(下篇)
Sep 14 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
Mar 21 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
Nov 02 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
深入浅析JavaScript中的Function类型
Jul 09 Javascript
JS for循环中i++ 和 ++i的区别介绍
Jul 20 Javascript
vue实现app页面切换动画效果实例
May 23 Javascript
input输入框内容实时监测(附代码)
Aug 15 Javascript
jQuery EasyUI开发技巧总结
Sep 26 jQuery
javascript获取图片的top N主色值方法详解
Jan 26 Javascript
使用uni-app开发微信小程序的实现
Dec 13 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生成HTML静态页面实例代码
2008/08/31 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
javascript基本语法分析说明
2008/06/15 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
vue 获取视频时长的实例代码
2019/08/20 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Python中的Django基本命令实例详解
2018/07/15 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
python实现学生通讯录管理系统
2021/02/25 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
什么是lambda函数
2013/09/17 面试题
大学生求职简历自我评价
2015/03/02 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python