http

2022-04-02  本文已影响0人  三省吾身_9862

http

http.METHODS // [ 'ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD',...]
http.STATUS_CODES // { '100': 'Continue', '101': 'Switching Protocols', '102': 'Processing', '103': 'Early Hints', '200': 'OK', ...}

以下两种代码等价:

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('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}`)
})
// 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服务实例

server.on('close', () => console.log('close')); // 服务器关闭时触发
server.on('connection', () => console.log('connection')); // 建立新的 TCP 流时会触发此事件
server.on('request', (request, res) => {}); // 每次浏览器来请求服务器,都会出发

<boolean> 指示服务器是否正在监听连接。

server.maxHeadersCount = 3000 // 限制最大传入标头计数。 如果设置为 0,则不会应用任何限制。(默认值: 2000)
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')
res.end('data'); // 给浏览器发送数据
response.setHeader('Content-Type', 'text/html');
response.getHeader('content-type') // contentType 是 'text/html'; 读取已排队但未发送到客户端的标头
response.setHeader('Foo', 'bar');
response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
response.getHeaderNames(); // ['foo', 'set-cookie']
response.getHeaders(); // { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }

返回 Boolean,相应头是否有name字段

相应头,移除name字段

response.statusCode = 404; // 设置响应 状态码
response.statusMessage = 'Not found'; // 设置响应 状态信息

request

request.setHeader('Content-Type', 'application/json');  // 设置请求头
request.removeHeader('Content-Type'); // 删除请求头中的 指定 字段
request.setHeader('content-type', 'text/html'); // 设置请求头
// 获取请求头 字段
request.getRawHeaderNames(); // ['Foo', 'Set-Cookie'] 

创建静态资源服务

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')
})
上一篇 下一篇

猜你喜欢

热点阅读