2017-08-28 256 views
0

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

我对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"); 
}) 

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"); 
}) 
+0

你使用一个框架的NodeJS,像特快例子吗? – CCH

+0

是的,快递!编辑主帖。 –

+0

你可以发布你到目前为止的代码吗?而你的快递版本 – CCH

回答

0

要读取POST数据,你需要身体解析器。首先,您使用命令行安装:

npm install body-parser --save 

然后,你包括在您的主要app.js文件:

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

最后在POST航线使用它,你使用req.body

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

你的全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!') 
}); 

然后你在命令行中使用启动它:

node response.js 

然后你POST请求的网址: http://localhost:3000/api/postRoute

+0

我用你的方法,我试图找到一种方法来检查它是否工作。我向我的response.js文件(包含你的代码)提交了一个POST请求,但是'res.send'和'console.log'都没有提示任何文本?我如何验证请求实际完成? –

+0

你在浏览器端得到回复吗? – CCH

+0

你是什么意思'提交POST请求到我的response.js文件?你不应该发布_to_文件,而是发布到运行该文件的nodejs express服务器上......你是否在尝试POST请求之前运行'node response.js'? – CCH