我在Nuxt js的文档(https://nuxtjs.org/docs/2.x/configuration-glossary/configuration-servermiddleware/)中看到我可以使用express扩展服务器中间件。 我用 GET 请求测试了它,它有效,但是当我使用 POST 请求时,请求中没有正文。
/api/index.js:
const express = require('express');
const bodyParser = require('body-parser');
import Cities from './offline/cities';
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/findCity', function (req, res) {
if (!req.body.input) {
res.status(400).json();
return;
}
res.status(200).json(Cities.filter(req.body.input, req.body.opt));
});
module.exports = { path: '/api', handler: app };
/nuxt.config.js:
serverMiddleware: [ '~/api/index.js' ],
mixin.js
async findCity(input, opt) {
return (await this.$axios.post(process.env.DOMAIN_URL + '/api/findCity', { input, opt })).data;
}
在 chrome 开发工具中发送正文:
在您的
/api/index.js
文件中,您可以通过以下方式获取请求数据:
req.on('data', (data) => {
console.log(data.toString())
})
仅使用
data
,您将获得一个可读的 Buffer 对象。添加 .toString()
,您将获得数据的“纯文本”表示形式。
我不知道这样是否能直接解决原来的问题,但这是一种效率。这对我解决问题时有帮助,得到
req.body
。
使用 Express +4.16,您不需要单独导入
body-parser
,因为 .json
和 .urlencoded
包含在 Express 基础中。
变更日志: https://expressjs.com/en/changelog/4x.html#4.16.0
有关它的文章: https://medium.com/@mmajdanski/express-body-parser-and-why-may-not-need-it-335803cd048c
这对我有用:
const express = require('express')
const app = express()
app.use(express.urlencoded({extended: true}));
app.use(express.json())
app.all('/myAPIroute*', (req, res) => {
console.log("Req body is: ", req.body)
})
module.exports = app