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 相关文章推荐
java script编程起步(第三课)
Jan 10 Javascript
javascript获得服务器端控件的ID的实现代码
Dec 28 Javascript
深入理解JavaScript系列(15) 函数(Functions)
Apr 12 Javascript
浅析Cookie中的Path与domain
Dec 18 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
jquery使用animate方法实现控制元素移动
Mar 27 Javascript
深究AngularJS之ui-router详解
Jun 13 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
vue 实现全选全不选的示例代码
Mar 29 Javascript
vue 巧用过渡效果(小结)
Sep 22 Javascript
JQuery特殊效果和链式调用操作示例
May 13 jQuery
微信小程序网络请求实现过程解析
Nov 06 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
php实现递归的三种基本方式
2020/07/04 PHP
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
Prototype框架详解
2015/11/25 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Python切片索引用法示例
2018/05/15 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
Python datetime 如何处理时区信息
2020/09/02 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
德国机车企业:FC-Moto
2017/10/27 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
一些高难度的SQL面试题
2016/11/29 面试题
办公室主任职责范本
2014/03/07 职场文书
刑事和解协议书范本
2014/11/19 职场文书
车间班组长竞聘书
2015/09/15 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
导游词之江南周庄
2019/12/06 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
vue首次渲染全过程
2021/04/21 Vue.js
idea下配置tomcat避坑详解
2022/04/12 Servers