使用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类中的公有变量和私有变量
Jul 24 Javascript
jQuery.ajax 用户登录验证代码
Oct 29 Javascript
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
js带点自动图片轮播幻灯片特效代码分享
Sep 07 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
May 20 Javascript
全选复选框JavaScript编写小结(附代码)
Aug 16 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
Jun 07 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
Sep 14 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 Javascript
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
原生js实现轮播图
2017/02/27 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
深入理解Python对Json的解析
2017/02/14 Python
Django 使用logging打印日志的实例
2018/04/28 Python
Python unittest单元测试框架总结
2018/09/08 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
python 修改本地网络配置的方法
2019/08/14 Python
python实现井字棋小游戏
2020/03/04 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
Python中logger日志模块详解
2020/08/04 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
UNIX文件系统常用命令
2012/05/25 面试题
2014年幼儿园植树节活动方案
2014/03/02 职场文书
家庭教育的心得体会
2014/09/01 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
大学生党员自我评价
2015/03/04 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书