http
-
http.METHODS 解析器支持的 HTTP 方法列表
http.METHODS // [ 'ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD',...]
-
http.STATUS_CODES 所有标准 HTTP 响应状态代码的集合
http.STATUS_CODES // { '100': 'Continue', '101': 'Switching Protocols', '102': 'Processing', '103': 'Early Hints', '200': 'OK', ...}
-
http.createServer([options][, requestListener]) 创建服务
以下两种代码等价:
const http = require('http');
// 创建本地服务器来从其接收数据
const server = http.createServer((req, res) => {});
server.listen(8000);
const http = require('http');
// 创建本地服务器来从其接收数据
const server = http.createServer();
// 监听请求事件
server.on('request', (request, res) => {});
server.listen(8000);
-
http.get(url[, options][, callback]) 服务器请求 其他服务器资源
http.get('http://www.baidu.com',(res)=>{
var html = ""
res.on("data", data => html+=data )
res.on("end",() => console.log(html))
}).on("error",(e)=>{
console.log(`获取数据失败: ${e.message}`)
})
-
http.request(url[, options][, callback]) 服务器向 其他服务器资源 提交数据
// 1. 创建连接
const req = http.request({
hostname: 'www.baidu.com',
port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
}, (res) => {
// 4. 收到返回数据
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', chunk => console.log(`BODY: ${chunk}`);
res.on('end', () => console.log('No more data in response.'));
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
// 2. 将数据写入请求正文
req.write(JSON.stringify({
'msg': 'Hello World!'
}));
// 3. 发送数据
req.end();
-
其他见官方文档
http服务实例
-
'close' 事件
server.on('close', () => console.log('close')); // 服务器关闭时触发
-
'connection' 事件
server.on('connection', () => console.log('connection')); // 建立新的 TCP 流时会触发此事件
-
'request' 事件
server.on('request', (request, res) => {}); // 每次浏览器来请求服务器,都会出发
-
server.close([callback]) 停止服务器
-
server.listening
<boolean> 指示服务器是否正在监听连接。
-
server.maxHeadersCount
server.maxHeadersCount = 3000 // 限制最大传入标头计数。 如果设置为 0,则不会应用任何限制。(默认值: 2000)
-
server.requestTimeout
server.requestTimeout = 60 * 1000; // 设置从客户端接收整个请求的超时值(以毫秒为单位)(默认值:0)
-
其他见官方文档
response
res.writeHead(200, {
'Content-Type': 'application/json; urf-8',
'Cache-Control': 'no-cache'
})
res.setHeader('Content-Type', 'application/json; urf-8')
res.setHeader('Cache-Control', 'no-cache')
-
response.end([data[, encoding]][, callback])
res.end('data'); // 给浏览器发送数据
-
response.getHeader(name)
response.setHeader('Content-Type', 'text/html');
response.getHeader('content-type') // contentType 是 'text/html'; 读取已排队但未发送到客户端的标头
-
response.getHeaderNames()
response.setHeader('Foo', 'bar');
response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
response.getHeaderNames(); // ['foo', 'set-cookie']
-
response.getHeaders()
response.getHeaders(); // { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }
-
response.hasHeader(name)
返回 Boolean,相应头是否有name字段
-
response.removeHeader(name)
相应头,移除name字段
-
response.statusCode
response.statusCode = 404; // 设置响应 状态码
-
response.statusMessage
response.statusMessage = 'Not found'; // 设置响应 状态信息
-
response.writeHead(statusCode[, statusMessage][, headers])
-
其他见官方文档
request
-
request.setHeader(name, value)
request.setHeader('Content-Type', 'application/json'); // 设置请求头
-
request.removeHeader(name)
request.removeHeader('Content-Type'); // 删除请求头中的 指定 字段
-
request.getHeader(name)
request.setHeader('content-type', 'text/html'); // 设置请求头
-
request.getRawHeaderNames()
// 获取请求头 字段
request.getRawHeaderNames(); // ['Foo', 'Set-Cookie']
-
request.path 请求的路径
-
request.method 请求的方法
-
request.host 请求的主机
-
request.protocol 请求的协议
-
其他见官方文档
创建静态资源服务
image.pngconst http = require('http')
const fs = require('fs')
const path = require('path')
const server = http.createServer(async(req, res) => {
let fPath = '',
baseUrl = path.resolve('www');
if (req.url === '/') {
fPath = path.join(baseUrl, 'index.html')
} else {
fPath = path.join(baseUrl, req.url)
}
const str = await fs.readFileSync(fPath, 'utf-8')
res.end(str)
})
server.listen(3000, () => {
console.log('run')
})
网友评论