使用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 字符 Escape,encodeURI,encodeURIComponent
Jul 09 Javascript
javascript下数值型比较难点说明
Jun 07 Javascript
FileUpload上传图片(图片不变形)
Aug 05 Javascript
node.js中格式化数字增加千位符的几种方法
Jul 03 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
Oct 26 Javascript
浅谈键盘上回车按钮的js触发事件
Feb 13 Javascript
JavaScript实现打地鼠小游戏
Apr 23 Javascript
vue+axios实现登录拦截的实例代码
May 22 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
使用Vue.js和Element-UI做一个简单登录页面的实例
Feb 23 Javascript
封装微信小程序http拦截器过程解析
Aug 13 Javascript
如何在微信小程序中存setStorage
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
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
php 文件上传系统手记
2009/10/26 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python查询mysql中文乱码问题
2014/11/09 Python
Python json模块使用实例
2015/04/11 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
报到证丢失证明
2014/01/11 职场文书
推荐信格式范文
2014/05/09 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
食品安全主题班会
2015/08/13 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
一级电子管军用接收机测评
2022/04/05 无线电
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技