Nuxt 服务器中间件发布请求不起作用

问题描述 投票:0回答:2

我在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 开发工具中发送正文:

javascript node.js express nuxt.js
2个回答
3
投票

在您的

/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
© www.soinside.com 2019 - 2024. All rights reserved.