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 相关文章推荐
使用EXT实现无刷新动态调用股票信息
Nov 01 Javascript
javascript学习笔记(四) Number 数字类型
Jun 19 Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 Javascript
Javascript技术栈中的四种依赖注入小结
Feb 27 Javascript
javascript html5摇一摇功能的实现
Apr 19 Javascript
Javascript删除指定元素节点的方法
Jun 21 Javascript
vue的props实现子组件随父组件一起变化
Oct 27 Javascript
jquery编写日期选择器
Mar 16 Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 Javascript
微信小程序结合Storage实现搜索历史效果
May 18 Javascript
jQuery实现朋友圈查看图片
Sep 11 jQuery
vue-cropper组件实现图片切割上传
May 27 Vue.js
实例讲解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
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
JS实现异步上传压缩图片
2017/04/22 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
简单学习Python多进程Multiprocessing
2017/08/29 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Django中的用户身份验证示例详解
2019/08/07 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
综合实践活动报告
2015/02/05 职场文书
新年寄语2016
2015/08/17 职场文书
学生检讨书范文
2019/06/24 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
pandas取dataframe特定行列的实现方法
2021/05/24 Python