我有自己的rest API,内部调用NLP API,我必须在其URL上发布一些数据。 我正在使用针来实现这一目标,但是有一些我无法捕获的错误,而我自己的api正在将500返回到前端。
以下是我的server.js代码的一部分:
app.post('/api/get',function(req,res) {
//console.log(req);
console.log("here in post ");
if(!req.body){
return res.send(400);
}
//console.log(req.body.msg);
var searchQuery = req.body.msg;
var options = { 'api-key' : '3080a0e0-1111-11e5-a409-7159d0ac8188' };
needle.post('http://api.cortical.io:80/rest/text/keywords?retina_name=en_associative',searchQuery,options,function(err, resp){
if(err){
console.log('something went wrong :' + err);
}
console.log('Got :'+resp );
});
我每次都会到达here in post
,但之后什么都没有。我也很好奇这是为外部API指定我的api-key的正确方法。
感谢。
答案 0 :(得分:1)
如果您使用快递4.x,我不确定您是否配置了快速服务器,但您需要安装正文解析器并在快速配置中添加以下行:
getSomething()
如果您使用的是Express 3.x版本,则无需安装正文解析器:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
现在关于你的邮寄路线我编辑了一下:
var express = require('express');
var app = express();
app.use(express.json());
app.use(express.urlencoded());
所以我添加了一个名为 config.js 的新文件,以便为您的所有api密钥,第三方服务的网址提供参考。
var config = require('./config');
app.post('/api/get', function (req, res) {
var searchQuery = {
q: req.body.msg
};
var NEEDLE_API_KEY = config.needle.API_KEY;
var NEEDLE_URL = config.needle.URL;
var options = {
'api-key': NEEDLE_API_KEY
};
needle.post(NEEDLE_URL, searchQuery, options, function (err, needleResponse) {
console.log(err || needleResponse.body);
res.json(err || needleResponse.body);
});
});
因此,当您在控制台上运行服务器时,应该将值设置为名为NEEDLE_API_KEY的全局环境变量:
module.exports = {
needle: {
API_KEY: process.env.NEEDLE_API_KEY,
URL: 'http://api.cortical.io:80/rest/text/keywords?retina_name=en_associative'
}
};
因此,通过这种方式,您不会在源代码上保存任何键,而是将键保存在仅在服务器计算机上可用的全局环境变量中。