使用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 morgan = require('morgan'); //打印日志
var app = express();
// path方法 比较简单
app.use(express.static('./public'))
app.use(morgan())
app.get('/',(req,res,next)=>{
res.end('hello');
next(); // 进行下一步,打印日志
})
//Router方法 适合某一个模块下的多个子路由
var Router = express.Router();
Router.get('/add',(req,res)=>{
res.end('add')
})
Router.get('/list',(req,res)=>{
res.end('list')
})
app.use('/post', Router)
//route方法 适合restful API
app.route('/article')
.get((req,res)=>{
res.end('/article get')
})
.post((req,res)=>{
res.end('/article post')
})
app.param('newsId', (req, res, next, newsId)=>{
req.newsId = newsId;
next();
})
app.get('/news/:newsId', (req, res)=>{
req.end('newsId:' + req.newsId);
})
app.listen(18001, function afterLister(){
console.log('服务再次启动')
})
创建TCP服务器
- 使用net模块创建TCP服务器
- 使用telnet连接TCP服务器
- 使用net创建TCP客户端
tcp.js:
var net = require('net')
const PORT = 18001;
const HOST = '127.0.0.1';
var clientServer = function(socket){
console.log('comeone connected')
socket.on('data',(data)=>{
console.log(socket.remoteAddress, socket.remotePort, data.toString())
socket.write('服务端write')
})
socket.on('close',()=>{
console.log(socket.remoteAddress, socket.remotePort,'disconnected')
})
}
var app = net.createServer(clientServer)
app.listen(PORT,HOST,'',function(){
console.log('监听启动:'+HOST+':'+PORT)
console.log('监听成功')
})
tcpClient.js:
var net = require('net')
const PORT = 18001;
const HOST = '127.0.0.1';
var tcpClient = net.Socket();
tcpClient.connect(PORT, HOST, function(){
console.log('客户端发送信息成功打印')
tcpClient.write('客户端发送信息成功')
});
tcpClient.on('data',(data)=>{
console.log( data.toString())
})









网友评论