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 相关文章推荐
学习ExtJS Window常用方法
Oct 07 Javascript
javascript 哈希表(hashtable)的简单实现
Jan 20 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
给before和after伪元素设置js效果的方法
Dec 04 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
jsTree使用记录实例
Dec 01 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
angular2 组件之间通过service互相传递的实例
Sep 30 Javascript
详解vue项目接入微信JSSDK的坑
Dec 14 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
May 09 Javascript
Openlayers3实现车辆轨迹回放功能
Sep 29 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数据流应用的简单例子
2012/06/01 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
老生常谈js数据类型
2017/08/03 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
Pycharm Git 设置方法
2020/09/15 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
写演讲稿要注意的六件事
2014/01/14 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
步步惊心观后感
2015/06/12 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
神州牡丹园的导游词
2019/11/20 职场文书