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 服务器中间件发布请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章

nuxt 类组件。异步获取不起作用

当我更改 Nginx 位置时,Nuxt.js 不起作用

我在 Nuxt 的手风琴上的转换不起作用

CORS 中间件在 nodeJS 中不起作用

NuxtServerInit 在 Vuex 模块模式下不起作用 - Nuxt.js

windicss 类在 Nuxt App 中不起作用