http

作者: 三省吾身_9862 | 来源:发表于2022-04-02 14:06 被阅读0次

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.png
const 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')
})

相关文章

网友评论

      本文标题:http

      本文链接:https://www.haomeiwen.com/subject/mphtsrtx.html