目录
2.调用http.createServer()方法,创建web服务器实例
② req.setTimeout(timeout[, callback])
② response.writeHead(statusCode[, statusMessage][, headers])
③ res.setTimeout(msecs[, callback])
一、http模块简介
http模块是node.js内置的模块,支持node.js创建web服务器。
为了支持所有可能的HTTP应用程序,Node.js的http模块只做初级的操作,只涉及到流处理和消息解析。它将消息解析为请求头和请求体,但不解析实际的请求头或请求体。
二、创建一个简单的web服务器实例
1.导入http模块
const http = require('http')
2.调用http.createServer()方法,创建web服务器实例
const server = http.createServer()
3.绑定request事件,监听客户端的网络请求
server.on('request',(req,res)=>{
res.write('Hello Nodejs!')
res.end()
})
4.调用.listen()方法,定义端口,启动服务器
server.listen(8080,()=>{
console.log('server running at http://127.0.0.1:8080')
})
三、req和res
1.req
req是请求对象,可以获取客户端相关数据或属性
① req.setHeader(name, value)
作用:设置请求头
req.setHeader('Content-Type', 'application/json');
② req.setTimeout(timeout[, callback])
作用:设置请求超时,单位为毫秒
req.setTimeout(3000, () => {
console.log("timeout")
process.exit(0) //结束进程
})
③ const { key } = req
作用:获取req的属性
const {url} = req
2.res
res是响应对象,可以返回服务端相关数据或属性
① res.setHeader(name, value)
作用:为一个隐式的响应头设置值
res.setHeader('Content-Type', 'text/html');
② response.writeHead(statusCode[, statusMessage][, headers])
作用:发送一个响应头给请求,包括(状态码,[状态描述],[响应头])
注意:res.setHeader()设置的响应头会与 res.writeHead() 设置的响应头合并,且 res.writeHead() 的优先
res.writeHead(200, { 'Content-Type': 'text/plain' });
③ res.setTimeout(msecs[, callback])
作用:设置 socket 的超时时间
res.setTimeout(50000, () => {
console.log("timeout")
})
3.根据不同的接口返回不同的内容
const http = require('http') // 导入http模块
const server = http.createServer() // 创建web服务器实例
server.on('request',(req,res)=>{ // 监听客户端的网络请求
const {url} = req // 获取url
res.writeHead(chooseStatus(url),{"Content-Type":"text/html;charset=utf-8"}) // 设置响应头
res.write(chooseUrl(url)) // 根据不同接口地址显示不同内容
res.end()
})
server.listen(8081,()=>{ // 调用.listen()方法,启动服务器
console.log('server running at http://127.0.0.1:8081')
})
function chooseUrl(url){ // 动态返回内容
switch(url){
case '/favicon.ico':
return
case '/api/getHeight':
return '180'
case '/api/getPerson':
return 'zhangsan'
default:
return '500'
}
}
function chooseStatus(url){ // 动态返回状态码
let arr=['/api/getHeight','/api/getPerson']
return arr.includes(url)?200:500
}