needle:node.js在POST上返回500

时间:2015-06-06 12:39:33

标签: javascript node.js express needle.js

我有自己的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的正确方法。

感谢。

1 个答案:

答案 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'
  }
};

因此,通过这种方式,您不会在源代码上保存任何键,而是将键保存在仅在服务器计算机上可用的全局环境变量中。