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 相关文章推荐
通过Unicode转义序列来加密,按你说的可以算是混淆吧
May 06 Javascript
javascript函数定义的几种区别小结
Jan 06 Javascript
js中confirm实现执行操作前弹出确认框的方法
Nov 01 Javascript
举例讲解JavaScript中关于对象操作的相关知识
Nov 16 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
Three.js基础部分学习
Jan 08 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
vue 弹框产生的滚动穿透问题的解决
Sep 21 Javascript
Vue绑定内联样式问题
Oct 17 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
May 30 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
Nov 20 Javascript
JavaScript简单编程实例学习
Feb 14 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
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
php 正则匹配函数体
2009/08/25 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
javascript call和apply方法
2008/11/24 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python编程之Re模块下的函数介绍
2017/10/28 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
django基础学习之send_mail功能
2019/08/07 Python
Django 拆分model和view的实现方法
2019/08/16 Python
pytorch数据预处理错误的解决
2020/02/20 Python
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
党员思想汇报范文
2013/12/30 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
公证书样本
2014/04/10 职场文书
暑期教师培训方案
2014/06/07 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL