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 获得服务器控件值的方法小结
May 11 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
javaScript对文字按照拼音排序实现代码
Dec 27 Javascript
js对象的复制继承实例
Jan 10 Javascript
web前端开发JQuery常用实例代码片段(50个)
Aug 28 Javascript
js实现文字垂直滚动和鼠标悬停效果
Dec 31 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
jQuery实现的placeholder效果完整实例
Aug 02 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
Aug 25 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
原型和原型链 prototype和proto的区别详情
Nov 02 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
express框架下使用session的方法
2019/07/31 Javascript
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python的UTC时间转换讲解
2019/02/26 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
高考自主招生自荐信
2013/10/20 职场文书
区三好学生主要事迹
2014/01/30 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
法人委托书的范本格式
2014/09/11 职场文书
婚庆答谢词
2015/01/04 职场文书
小时代观后感
2015/06/10 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫
Java数组详细介绍及相关工具类
2022/04/14 Java/Android
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers