Nuxt 服务器中间件发布请求不起作用
Posted
技术标签:
【中文标题】Nuxt 服务器中间件发布请求不起作用【英文标题】:Nuxt server middleware post request not working 【发布时间】:2021-04-18 04:31:06 【问题描述】:我在 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 开发工具中发送正文:
【问题讨论】:
【参考方案1】:在您的/api/index.js
文件中,您可以通过这种方式获取请求数据:
req.on('data', (data) =>
console.log(data.toString())
)
仅使用data
你会得到一个可读的 Buffer 对象。添加.toString()
,您就有了数据的“纯文本”表示。
【讨论】:
【参考方案2】:移除正文解析器
我不知道这是否会直接解决原来的问题,但它是一种效率。在解决获取 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
【讨论】:
以上是关于Nuxt 服务器中间件发布请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章