node http 模块 常用知识点记录

关于 node,总是断断续续的学一点,也只能在本地自己模拟实战,相信总会有实战的一天~~

  • http 作为服务端,开启服务,处理路由,响应等
  • http 作为客户端,发送请求
  • http、https、http2 开启服务

作为服务端

  1. 开启服务,有两种方式

方式1

const http = require('http')

// 开启服务
var server = http.createServer(function (req, res) {
  // 开启服务后具体做什么
  res.end('hello world')
}).listen(3000);

方式2

const http = require('http')
const server = new http.Server()
// node 中的服务都是继承 eventemit

// 开启服务
server.on('request', function () 
  // 开启服务后具体做什么
  res.end('hello world')
})
server.listen(3000)
  1. 路由

路由的原理:根据路径去判断

const http = require('http')
const server = new http.Server();
server.on('request', function () {
  var path = req.url;
  switch (path) {
    case '/':
      res.end('this is index');
      // res.end('<a href="./second">second</a>');
      break;
    case '/second':
      res.end('this is second');
      break;
    default:
      res.end('404');
      break;
  }
})
server.listen(3000)
  1. 获取请求头信息、设置响应头
const http = require('http')
const server = new http.Server();
server.on('request', function () {

  // 设置响应头:setHeader() / writeHead()
  // setHeader 设置多次,每次一个
  res.setHeader('xxx', 'yyy');
  res.setHeader('aaa', 'yyy');
  res.setHeader('bbb', 'yyy');
  
  // writeHead 只能设置一次,多个,会合并setHeader中的信息,同名优先级高
  res.writHead(200, {
    'content-type': 'text/html;charset=utf-8', //'text/plain;charset=utf-8'
    'ccc': 'yyy',
    'aaa': 'aaa'
  })

  // 需要先设置响应头,再设置res.end,需要先设置setHeader,再设置res.writHead
  

  // 请求头信息
  console.log(req.httpVersion)
  console.log(req.method)
  console.log(req.url)
  console.log(http.STATUS_CODES)

  // 比如根据请求头进行:token处理
  var token = md5(req.url + req.headers['time'] + 'dsjaongaoeng');
  if (req.headers['token'] == token) {
    res.end()
  } else {
    res.end()
  }

})
server.listen(3000)
  1. 常用监听事件
const http = require('http')
const server = new http.Server();
server.on('request', function () {

  // 请求监听
  // 每次有数据过来
  req.on('data', function (chunk) {

  })
  // 整个数据传输完毕
  req.on('end', function () {

  })

  // 响应监听
  res.on('finish', function () {
    console.log('响应已发送')
  })

  res.on('timeout', function () {
    res.end('服务器忙')
  })
  res.setTimeout(3000)

})

// 连接
server.on('connection', function () {

})

// 错误处理
server.on('error', function (err) {
  console.log(err.code)
})

// 超时 2000 ms
server.setTimeout(2000, function () {
  console.log('超时')
})

server.listen(3000)
  1. 接受 get 和 post 请求
const http = require('http')
const url = require('url')
const server = new http.Server();
server.on('request', function () {
  
  // get 参数,放在url中,不会触发 data
  var params = url.parse(req.url, true).query;
  // post 参数,在请求体中,会触发 data
  var body = ""
  req.on('data', function (thunk) {
    body += chunk
  })
  req.end('end', function () {
    console.log(body)
  });

})

server.listen(3000)

http 作为客户端

  1. 发送请求:request 发送 post 请求,get 发送 get 请求
const http = require('http')

const option = {
  hostname: '127.0.0.1',
  port: 3000,
  method: 'POST',
  path: '/', // 可不写,默认到首页
  headers: {
    'Content-Type': 'application/json'
  }
}
// post 
var req = http.request(option, function (res) {
  // 接收响应
  var body = ''
  res.on('data', function (chunk) {
    body += chunk
  })
  res.on('end', function () {
    console.log(body)
  })
});

var postJson = '{"a": 123, "b": 456}'
req.write(postJson)
req.end(); // 结束请求

// get
http.get('http://localhost:3000/?a=123', function (req) {
  // 接收响应
  var body = ''
  res.on('data', function (chunk) {
    body += chunk
  })
  res.on('end', function () {
    console.log(body)
  })
});
  1. 设置请求头和响应头
const http = require('http')

const option = {
  hostname: '127.0.0.1',
  port: 3000,
  method: 'POST',
  path: '/', // 可不写,默认到首页
  headers: { // 可在此设置请求头
    'Content-Type': 'application/json'
  }
}
// post 
var req = http.request(option, function (res) {
  // 避免乱码
  res.setEncoding('utf-8')
  // 获取响应头
  console.log(res.headers)
  console.log(res.statusCode)

  // 接收响应
  var body = ''
  res.on('data', function (chunk) {
    body += chunk
  })
  res.on('end', function () {
    console.log(body)
  })
});

var postJson = '{"a": 123, "b": 456}'
// 设置请求头
req.setHeader('xx', 'aaa')

req.write(postJson)
req.end(); // 结束请求

http、https、http2 开启服务的区别

  1. http
const http = require('http')
const options = {}
// options 可不传
http.createServer(options, (req, res) => {
  res.end()
}).listen(3000)

http.createServer((req, res) => {
  res.end()
}).listen(3000)
  1. https
const https = require('https')
const fs = require('fs')

const options = {
  key: fs.readFileSync('./privatekey.pem'), // 私钥
  cert: fs.readFileSync('./certificate.pem') // 公钥
}

https.createServer(options, (req, res) => {
  res.end()
}).listen(3000)
  1. http2
const http2 = require('http2')
const fs = require('fs')

const options = {
  key: fs.readFileSync('./privatekey.pem'), // 私钥
  cert: fs.readFileSync('./certificate.pem') // 公钥
}

http2.createSecureServer(options, (req, res) => {
  res.end()
}).listen(3000)

最后,关于 node 还有很多需要学的,比如 文件(fs)系统,及 node 使用数据库,还有框架(express、koa2,曾经学过,不用忘的好快),服务器部署等,加油!。

转载于:https://www.cnblogs.com/EnSnail/p/10960256.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用于构建高性能、可扩展的网络应用程序。它允许我们在服务器端使用JavaScript编写和运行代码,并且具有以下重要的知识点: 1. 异步编程:Node.js采用非阻塞I/O模型,通过事件驱动和回调函数实现异步编程。这使得可以处理大量并发请求而不会阻塞应用程序。 2. 模块化:Node.js支持模块化开发,通过模块系统可以将代码分割成小的、可复用的模块。内置的模块系统提供了大量的核心模块,同时也可以使用第三方模块。 3. 事件驱动:Node.js使用事件驱动的架构,通过触发和监听事件来实现异步处理。核心模块`events`提供了事件的处理能力。 4. 文件系统操作:Node.js提供了对文件系统的操作能力,可以读写文件、创建和删除目录等。核心模块`fs`用于处理文件系统相关操作。 5. 网络通信:Node.js可以创建网络服务器和客户端,通过核心模块`http`和`https`实现HTTPHTTPS协议的通信。 6. 第三方库和框架:Node.js拥有庞大的第三方库和框架生态系统,如Express.js、Koa.js、Socket.io等,可以加速开发过程。 7. 数据库连接:Node.js可以连接各种数据库,如MySQL、MongoDB、PostgreSQL等。通过相应的驱动程序或ORM框架,可以实现与数据库的交互。 8. 安全性:Node.js有一些内置的安全机制,如防止跨站脚本攻击(XSS)和SQL注入攻击。同时也可以使用第三方模块增强安全性。 这些是Node.js的一些重要知识点,希望对你有帮助!如果你还有其他问题,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值