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 相关文章推荐
给页面渲染时间加速 干掉Dom Level 0 Event
Dec 19 Javascript
表格单元格交错着色实现思路及代码
Apr 01 Javascript
javascrip关于继承的小例子
May 10 Javascript
jQuery实现下拉框左右选择的简单实例
Feb 22 Javascript
JavaScript限定图片显示大小的方法
Mar 11 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
Aug 01 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 Javascript
js实现点击按钮弹出上传文件的窗口
Dec 23 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
Jun 20 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
vue中datepicker的使用教程实例代码详解
Jul 08 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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
javascript的事件描述
2006/09/08 Javascript
Display SQL Server Login Mode
2007/06/21 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python的Django框架中if标签的相关使用
2015/07/15 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
如何在python中写hive脚本
2019/11/08 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
python如何实时获取tcpdump输出
2020/09/16 Python
最新pycharm安装教程
2020/11/18 Python
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
护理学专业推荐信
2013/12/03 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
物理教学随笔感言
2014/02/22 职场文书
任命通知范文
2015/04/21 职场文书
2015年小学语文工作总结
2015/05/25 职场文书