搭建HTTP服务器 【分三步】:
- 引入模块
- 创建服务器
- 监听服务器
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 // '做点事情'
})
})
结束了,爱懂不懂,拿来吧你