2021.07.27 搭建HTTP服务器【好久不见 node】

搭建HTTP服务器 【分三步】:

  1. 引入模块
  2. 创建服务器
  3. 监听服务器
    const http = require('http') // 引入http模块
    const port = 3000 // 服务器在指定端口(3000)上进行监听
    const server = http.createServer((req, res) => { // 创建 HTTP服务器
      res.statusCode = 200 // 状态码(响应成功)
      res.setHeader('Content-Type', 'text/plain') // 设置Content-Type请求头
      res.end('结束了哦') // 最后结束并关闭响应,将内容作为参数添加到end()
    })
    server.listen(port, () => { // 监听服务器,当服务器就绪时,listen中的回调函数就会被调用
      console.log(`猫猫的服务器运行在http://${hostname}:${post}`)
    })

使用 Node.js 发送 HTTP 请求 【实验失败】:

  • GET
const https = require('https')
const options = {
  hostname: 'nodejs.cn',
  port: 443,
  path: '/todos',
  method: 'GET'
}

const req = https.request(options, res => {
  console.log(`状态码: ${res.statusCode}`)

  res.on('data', d => {
    process.stdout.write(d)
  })
})

req.on('error', error => {
  console.error(error)
})

req.end()
  • POST
const https = require('https')

const data = JSON.stringify({
  todo: '做点事情'
})

const options = {
  hostname: 'nodejs.cn',
  port: 443,
  path: '/todos',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
}

const req = https.request(options, res => {
  console.log(`状态码: ${res.statusCode}`)

  res.on('data', d => {
    process.stdout.write(d)
  })
})

req.on('error', error => {
  console.error(error)
})

req.write(data)
req.end()
  • PUT 和 DELETE 请求使用相同的 POST 请求格式,只需更改 options.method 的值即可。

使用 Axios 库执行 HTTP 请求

const axios = require('axios')

axios
  .post('http://nodejs.cn/todos', {
    todo: '做点事情'
  })
  .then(res => {
    console.log(`状态码: ${res.statusCode}`)
    console.log(res)
  })
  .catch(error => {
    console.error(error)
  })

使用 Node.js 的标准模块来发送 POST 请求

const https = require('https')

const data = JSON.stringify({
  todo: '做点事情'
})

const options = {
  hostname: 'nodejs.cn',
  port: 443,
  path: '/todos',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
}

const req = https.request(options, res => {
  console.log(`状态码: ${res.statusCode}`)

  res.on('data', d => {
    process.stdout.write(d)
  })
})

req.on('error', error => {
  console.error(error)
})

req.write(data)
req.end()

使用 Node.js 获取 HTTP 请求的正文数据

  • 方式一: 使用Express【使用 body-parser Node.js 模块】
// 请求
const axios = require('axios')

axios.post('http://nodejs.cn/todos', {
  todo: '做点事情'
})
// 对应服务器代码
const express = require('express')
const app = express()

app.use(
  express.urlencoded({
    extended: true
  })
)

app.use(express.json())

app.post('/todos', (req, res) => {
  console.log(req.body.todo)
})
  • 方式二: 普通node.js执行

当使用http.createServer初始化http服务器时,服务器会在获取所有http请求头时调用回调(而不是在请求正文时)
在连接回调中传入的request对象是一个流。所以,必须要监听要处理的主体内容,并且其是按数据块处理的。

首先,监听流的data事件来获取数据,然后在数据结束时调用一次流的end事件。

const server = http.createServer((req, res) => {
  // 可以访问 HTTP 请求头
  req.on('data', chunk => {
    console.log(`可用的数据块: ${chunk}`)
  })
  req.on('end', () => {
    //数据结束
  })
})

因此,若要访问数据(假设想接收到字符串),则必须将其放入数组中。

const server = http.createServer((req, res) => {
  let data = '';
  req.on('data', chunk => {
    data += chunk;
  })
  req.on('end', () => {
    JSON.parse(data).todo // '做点事情'
  })
})

结束了,爱懂不懂,拿来吧你

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值