使用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面向对象编程
Mar 04 Javascript
让js弹出窗口居前显示的实现方法
Jul 10 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
Nov 06 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
Dec 04 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 Javascript
理解 javascript 中的函数表达式与函数声明
Jul 07 Javascript
JS实现简单的表格增删
Jan 16 Javascript
基于JavaScript获取url参数2种方法
Apr 17 Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 Javascript
ant design pro中可控的筛选和排序实例
Nov 17 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 header Content-Type类型小结
2011/07/03 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
jQuery对象[0]是什么含义?
2010/07/31 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
Javascript动画效果(1)
2016/10/11 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
python中遍历文件的3个方法
2014/09/02 Python
介绍Python中的__future__模块
2015/04/27 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
什么是Remote Module
2016/06/10 面试题
创业计划书撰写原则
2014/01/25 职场文书
超市活动计划书
2014/04/24 职场文书
教师考核材料
2014/05/21 职场文书
单位活动策划方案
2014/08/17 职场文书
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL