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 相关文章推荐
jQuery获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
类似天猫商品详情随浏览器移动的示例代码
Feb 27 Javascript
javascript设计模式之解释器模式详解
Jun 05 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
Apr 19 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
详解用node.js实现简单的反向代理
Jun 26 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
微信小程序之圆形进度条实现思路
Feb 22 Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 Javascript
angular 实时监听input框value值的变化触发函数方法
Aug 31 Javascript
微信小程序实现拍照和相册选取图片
May 09 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
PL-880隐藏功能
2021/03/01 无线电
php xml文件操作实现代码(二)
2009/03/20 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
php加密解密实用类分享
2014/01/07 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
中药学专业求职信
2014/05/31 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
教师求职简历自我评价
2015/03/10 职场文书
十八大观后感
2015/06/12 职场文书
关于python类SortedList详解
2021/09/04 Python