使用 Express 处理 POST 请求
Express 使得为 POST 请求注册路由处理程序变得容易。 这是一个基本的 POST 请求处理程序。
const express = require('express');
const app = express();
app.post('/', function requestHandler(req, res) {
res.end('Hello, World!');
});
const server = await app.listen(3000);
上面的代码在端口 3000 上启动了一个 Express 服务器,它处理对 /
端点。 等 HTTP 客户端向服务器发送请求 然后您可以使用 Axios。
const data = await axios.post('http://localhost:3000/', {}).then(res => res.data);
data; // 'Hello, World!'
JSON 请求体
POST 请求不同于 GET 请求 ,因为 POST 请求允许在 HTTP 请求体 中发送数据。 例如下面的代码在请求正文中发送一个带有 JSON 对象的 HTTP POST 请求:
const axios = require('axios');
const res = await axios.post('http://localhost:3000/', {
answer: 42
});
默认情况下,Express 不解析 HTTP 请求主体,但它确实有一个内置的 中间件 来填充 req.body
具有已解析请求正文的属性。 例如 app.use(express.json())
是您告诉 Express 自动为您解析 JSON 请求主体的方式。
const express = require('express');
const app = express();
// Parse JSON bodies for this app. Make sure you put
// `app.use(express.json())` **before** your route handlers!
app.use(express.json());
app.post('*', (req, res) => {
req.body; // JavaScript object containing the parse JSON
res.json(req.body);
});
const server = await app.listen(3000);
// Demo showing the server in action
const axios = require('axios');
const res = await axios.post('http://localhost:3000/', {
answer: 42
});
res.data; // `{ answer: 42 }`
URL 编码请求体
Express 有一个官方支持的模块 body-parser ,其中包括一个 用于 URL 编码请求主体的解析器 提交的请求主体一样,就像 HTML 表单 。
const express = require('express');
const app = express();
app.use(require('body-parser').urlencoded({ extended: false }));
app.post('*', (req, res) => {
req.body; // { answer: 42 }
res.json(req.body);
});
const server = await app.listen(3000);
// Demo of making a request with a URL-encoded body.
const axios = require('axios');
const headers = {
'Content-Type': 'application/x-www-form-urlencoded'
};
const res = await axios.
post('http://localhost:3000/', 'answer=42', { headers });
res.data; // { answer: 42 }
文件上传
POST 请求通常用于文件上传 。 Express 本身并不能使上传文件变得容易,但是有几个 npm 模块可以为您处理文件上传。 Formidable 是最流行的 Express 文件上传库。 以下是如何使用 Formidable 上传文件:
const app = require('express')();
const formidable = require('formidable');
const fs = require('fs');
app.post('/upload', function(req, res) {
const form = new formidable.IncomingForm();
// Parse `req` and upload all associated files
form.parse(req, function(err, fields, files) {
if (err != null) {
console.log(err)
return res.status(400).json({ message: err.message });
}
// The `files` object contains all files that were uploaded. Formidable
// parses each file and uploads it to a temporary file for you.
const [firstFileName] = Object.keys(files);
res.json({ filename: firstFileName });
});
});
const server = await app.listen(3000);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论