nodejs从POST请求中获取原始的请求体

10 浏览
0 Comments

nodejs从POST请求中获取原始的请求体

我在TradingView中设置了一个警报,它会发送一个带有请求的webhook到我的服务器,请求的主体是一些信息。这个webhook发送的是纯文本,而不是JSON数据。\n我想知道是否有办法获取到这个纯文本数据。\n这是JSON格式的webhook\n\"WEBHOOK\n然后这是我的代码\n

const express = require('express');
const app = express();
app.post('/webhook', (req, res) => {
})
app.listen(8080, () => {console.log("listening on port 8080")})

0
0 Comments

问题的出现原因是需要从POST请求中获取原始的请求体,但没有使用合适的中间件进行解析。解决方法是使用body-parser中间件来解析和提取HTTP请求的请求体。

首先需要安装body-parser中间件:

$ npm install body-parser

然后在代码中引入并使用它:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.text());

更多信息可以参考这个链接:[http://expressjs.com/en/resources/middleware/body-parser.html](http://expressjs.com/en/resources/middleware/body-parser.html)

但是某些情况下body-parser已经被弃用了,所以不能正常工作。在这种情况下,可以参考另一个回答中提供的正确方法来添加中间件。

0
0 Comments

问题的出现原因:

在上述代码中,当接收到POST请求时,需要从请求中获取原始的请求体内容。然而,在默认情况下,Express框架会对请求体进行解析,并将解析后的内容存储在req.body中。因此,如果直接访问req.body,将只能获取到解析后的内容,而无法获取到原始的请求体内容。

解决方法:

要获取原始的请求体内容,可以通过使用第三方中间件"raw-body"来实现。下面是解决方法的代码示例:

const express = require('express');
const app = express();
const getRawBody = require('raw-body');
app.post('/webhook', (req, res) => {
    getRawBody(req, {
        length: req.headers['content-length'],
        encoding: req.headers['content-encoding']
    }, function(err, string) {
        if (err) return next(err);
        req.rawBody = string;
        const { psw, message }  = JSON.parse(string);
    })
})
app.listen(8080, () => {console.log("listening on port 8080")})

以上代码中,我们首先引入了"raw-body"模块,并使用getRawBody函数来获取原始的请求体内容。在getRawBody函数的回调函数中,我们将获取到的原始内容存储在req.rawBody中,并通过JSON.parse将其转换为对象。然后,我们可以通过解构赋值的方式获取psw和message字段的值。这样就可以获取到POST请求的原始请求体内容。

通过上述解决方法,我们可以方便地获取到POST请求的原始请求体内容,以满足特定的业务需求。

0
0 Comments

问题出现的原因是没有使用body parsing中间件。根据问题描述,如果webhook是纯文本,可以使用express的`express.text()`中间件来解析请求体;如果是JSON格式,则可以使用`express.json()`中间件来解析请求体。以下是解决方法的示例代码:

对于纯文本:

const express = require('express');
const app = express();
app.use(express.text());
app.post('/webhook', (req, res) => {
  console.log(req.body); // 如果请求的Content-Type是text/plain,那么请求体将被解析为文本。
})
app.listen(8080, () => {console.log("listening on port 8080")});

对于JSON:

const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
  console.log(req.body); // 如果请求的Content-Type是application/json,那么请求体将被解析为JSON。
})
app.listen(8080, () => {console.log("listening on port 8080")});

通过使用适当的body parsing中间件,可以从POST请求中获取原始请求体。

0