使用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实现的鼠标链接提示效果生成器代码
Jun 28 Javascript
JavaScript函数、方法、对象代码
Oct 29 Javascript
Javascript闭包(Closure)详解
May 05 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
May 19 Javascript
JavaScript实现简单的tab选项卡切换
Jan 05 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
Nov 30 Javascript
AngularJS折叠菜单实现方法示例
May 18 Javascript
Vuex利用state保存新闻数据实例
Jun 28 Javascript
使用canvas进行图像编辑的实例
Aug 29 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
基于JQuery实现页面定时弹出广告
May 08 jQuery
Vue实现todo应用的示例
Feb 20 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 minixml详解
2008/07/19 PHP
php 中英文语言转换类
2011/09/07 PHP
比较详细PHP生成静态页面教程
2012/01/10 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
党员承诺书内容
2014/03/26 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
一年级学生期末评语
2014/04/21 职场文书
中秋节感想
2015/08/10 职场文书