Node.js创建Web、TCP服务器


Posted in Javascript onDecember 05, 2017

使用http模块创建Web服务器

Web服务器的功能:

接受HTTP请求(GET、POST、DELETE、PUT、PATCH)

处理HTTP请求(自己处理,或请求别的程序处理)

做出响应(返回页面、文件、各类数据等)

常见的Web服务器架构:

Nginx、Apache:负责接受HTTP请求,确定谁来处理请求,并返回请求的结果

php-fpm / php模块:处理分配给自己的请求,并将处理结果返回给分配者

常见请求种类:

请求文件:包括静态文件(网页、图片、前端JavaScript文件、css文件...),及由程序处理得到的文件

完成特定的操作:如登录、获取特定数据等

Node.js的Web服务器:

不依赖其他特定的Web服务器软件(如Apache、Nginx、IIS......)

Node.js代码处理请求的逻辑

Node.js代码负责Web服务器的各种“配置”

使用Express创建Web服务器

简单的Express服务器

静态文件服务

路由

中间件

简单的Express服务器:

var express = require('express'); 
var app = express(); 
app.get('', function(req, res){ 
<span style="white-space:pre"> </span>res.end('hello\n'); 
<span style="white-space:pre"> </span>}); 
<span style="white-space:pre"> </span>app.listen(18001, function afterListen(){ 
<span style="white-space:pre"> </span>console.log('express running on http://localhost:18001'); 
<span style="white-space:pre"> </span>});

静态文件范围:

网页、纯文本、图片、前端JavaScript代码、CSS样式表文件、媒体文件、字体文件

使用Express访问静态文件

<span style="white-space:pre"></span>app.use(express.static('./public'));

路由:

将不同的请求,分配给相应的处理函数

区分:路径、请求方法

三种路由实现方法:

path:比较简单

Router:比较适合同一个路由下的多个子路由

route:比较适合API

中间件

Connect:Node.js的中间件框架

分层处理

每层实现一个功能

创建TCP服务器

使用net模块创建TCP服务器

使用telnet连接TCP服务器

使用net创建TCP客户端

利用node.js搭建简单web服务器JS代码部分:

var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var dir, arg = process.argv[2] || ''; // 命令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
// 比如使用命令 node server debug,意思就是debug文件夹与server.js文件同级
// 且你想以debug文件夹启动web服务
 
http.createServer(function (req, res) {
var pathname = __dirname + url.parse(req.url).pathname;
dir = dir ? dir : pathname; // 记住dir(目录)
pathname = dir ? pathname.replace(dir, dir + arg + '/') : pathname; // 替换文件静态路径
if (path.extname(pathname) == "") {
pathname += "/";
}
if (pathname.charAt(pathname.length - 1) == "/") {
pathname += "index.html"; // 入口文件,此处默认index.html
}
 
fs.exists(pathname, function (exists) {
if (exists) {
switch (path.extname(pathname)) {
case ".html":
res.writeHead(200, {"Content-Type": "text/html"});
break;
case ".js":
res.writeHead(200, {"Content-Type": "text/javascript"});
break;
case ".css":
res.writeHead(200, {"Content-Type": "text/css"});
break;
case ".gif":
res.writeHead(200, {"Content-Type": "image/gif"});
break;
case ".jpg":
res.writeHead(200, {"Content-Type": "image/jpeg"});
break;
case ".png":
res.writeHead(200, {"Content-Type": "image/png"});
break;
default:
res.writeHead(200, {"Content-Type": "application/octet-stream"});
} 
// res可以自己添加信息来简单交互 比如可以修改点header信息 或者修改返回的资源数据
fs.readFile(pathname, function (err, data) {
res.end(data);
});
}
else {
res.writeHead(404, {"Content-Type": "text/html"});
res.end("<h1>404 Not Found</h1>");
}
});
}).listen(8085, "127.0.0.5"); // 服务器端口
console.log("server running at http://127.0.0.5:8085/");
Javascript 相关文章推荐
Javascript 解疑
Nov 11 Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
JavaScript删除数组元素的方法
Mar 20 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
Feb 23 Javascript
javascript动态创建对象的属性详解
Nov 07 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
JavaScript实现拖拽功能
Feb 11 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 Javascript
Javascript confirm多种使用方法解析
Sep 25 Javascript
实例讲解javascript实现异步图片上传方法
Dec 05 #Javascript
jquery如何实现点击空白处隐藏元素
Dec 05 #jQuery
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 #jQuery
最实用的JS数组函数整理
Dec 05 #Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
Dec 05 #Javascript
Vue DevTools调试工具的使用
Dec 05 #Javascript
Vue 项目部署到服务器的问题解决方法
Dec 05 #Javascript
You might like
thinkphp中的url跳转用法分析
2016/07/12 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
js 操作select相关方法函数
2009/12/06 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
js比较日期大小的方法
2015/05/12 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
Structs界面控制层技术
2013/10/11 面试题
中医药大学毕业生自荐信
2013/11/08 职场文书
物流司机岗位职责
2013/12/28 职场文书
生物制药自我鉴定
2014/01/25 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
学习型党组织心得体会
2014/09/12 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
发布会邀请函
2015/01/31 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL