使用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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
Prototype使用指南之dom.js
Jan 10 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
Jan 10 Javascript
网页中表单按回车就自动提交的问题的解决方案
Nov 03 Javascript
jquery实现的缩略图预览滑块实例
Jun 25 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
Oct 10 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
谈谈对vue响应式数据更新的误解
Aug 01 Javascript
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
webpack打包node.js后端项目的方法
Mar 10 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 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 curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
幼儿园实习生辞职信
2014/01/20 职场文书
2014中考励志标语
2014/06/05 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
实习单位指导教师评语
2014/12/30 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
JavaScript实现两个数组的交集
2022/03/25 Javascript
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python