Web 服务器
- 来源:Node.js实战第4章
- Node内置的
http
功能适合用来开发HTTP
功能,尽管它的API
比较底层,没有“糖”的效果,但这一切都是为了
- 高效与简洁与灵活
- 先学习使用
http
功能开发
- 再学习使用
中间件
添加功能
- 然后学习使用
Express
加快开发效率
一些概念
中间件
- 中间件一般为一个
JavaScript
函数,一般接受三个参数:请求对象、响应对象、命名为next
的回调参数
- 中间件是受到
Ruby
Rack
框架的启发
- 中间件:小巧、自包含、可重用
http
模块初使用
- 如下是一个简单的
http
模块搭建的web server
服务器
- 使用
createServer
创建一个服务,并让它监听7890
端口
- 使用
setHeader
往响应中写入头部信息,一般来说,在响应中放入不同的响应头,以便客户端根据不同格式的响应头进行处理
const http = require('http')
const port = 7890
const server = http.createServer((req, res) => {
const body = 'hello'
res.setHeader('Content-Length', body.length)
res.setHeader('Content-Type', 'text/plain')
res.write(body)
res.end()
})
server.listen(port)
创建302
404
服务
- 通过
setHeader
方法,能快速创建302
404
的响应
const url = 'https://baidu.com'
res.setHeader('Location', url)
res.statusCode = 302
res.end()
res.statusCode = 404
res.end()
创建Restful Api
服务:post
get
- 这里只举例
post
get
方法,其他如像 option
put
delete
请自行参考其他
switch (req.method) {
case 'POST':
req.setEncoding('utf-8')
let item
req.on('data', chunk => {
item += chunk
})
req.on('end', () => {
console.log(item)
res.end('ok')
})
break
case 'GET':
const body = `hello`
res.setHeader('Content-Length', Buffer.byteLength(body))
res.setHeader('Content-Type', 'text/plain; charset="utf-8"')
res.end(body)
break
}
利用 http
模块发起 http request
const http = require('http')
const options = {
host: 'localhost',
port: '7890',
path: '/index.html'
}
const req = http.request(options, rep => {
let body = ''
rep.on('data', data => {
body += data
})
rep.on('end', () => {
console.log(body)
})
})
req.end()