从请求中获取POST数据

And*_*ier 5 node.js slack

我需要从收到的请求中提取 POST 数据(使用 Slack Slash Commands,我基本上想检查调用该命令的通道,并且仅在某些特定通道中执行它)。

我对 NodeJs 比较陌生,所以我通常对请求之类的东西很困惑,欢迎提供精确的帮助。

(小细节:在尝试不同的方法时,我注意到,如果我请求Slack 的response.js,Slack 不会显示我在 shell 中看到的相同日志,而是在聊天中显示整个代码。我在做什么吗?错误的?)

编辑:我正在使用 Express。

编辑2:添加request.jsresponse.js

request.js

var request = require('request');
var requestData = {
    "token" : "XXXXXXXX",
    "team_id" : "XXXXX"
}
var options = {
    url : 'http://XX.XXX.XX.XX/request/response.js',
    method : 'POST',
    json : requestData
}

request(options, function(err, res, body) {
    console.log("requesting");
    if (err)
        console.log("error, mate");
    else
        console.log("no worries");
})
Run Code Online (Sandbox Code Playgroud)

response.js

const express = require('express')
const app = express()

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/request/response.js', function (req, res) {
    var post_body = req.body;
    console.log(post_body);
})

app.listen(3000, function() {
    console.log("listening");
})
Run Code Online (Sandbox Code Playgroud)

CCH*_*CCH 6

要读取 POST 数据,您需要body-parser。首先使用命令行安装它:

npm install body-parser --save
Run Code Online (Sandbox Code Playgroud)

然后,将其包含在主 app.js 文件中:

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
Run Code Online (Sandbox Code Playgroud)

最后要在POST路由中使用它,您可以使用req.body

app.post('/api/postRoute', function(req, res) {
    var post_body = req.body;
    // Return the POST message
    res.send(post_body);
});
Run Code Online (Sandbox Code Playgroud)

你的完整的response.js应该是这样的:

const express = require('express')
const app = express()
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/postRoute', function(req, res) {
    var post_body = req.body;
    // Return the POST message
    res.send(post_body);
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
});
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下命令从命令行启动它:

node response.js
Run Code Online (Sandbox Code Playgroud)

然后将请求 POST 到 URL: http://localhost:3000/api/postRoute