【问题标题】:needle : node.js returning 500 on POSTneedle : node.js 在 POST 上返回 500
【发布时间】:2015-08-21 08:59:45
【问题描述】:

我有自己的 rest API,它在内部调用 NLP API,为此我必须在他们的 URL 上发布一些数据。 我正在使用 needle 来实现这一点,但是有一些我无法捕捉到的错误,并且我自己的 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 的正确方法。

谢谢。

【问题讨论】:

    标签: javascript node.js express needle.js


    【解决方案1】:

    如果您使用的是 express 4.x,我不确定您是否配置了 express 服务器,但您需要安装 body-parser 并在您的 express 配置中添加以下行:

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

    如果您使用的是 express 3.x 版本,则无需安装 body-parser:

    var express = require('express');
    var app = express();
    
    app.use(express.json());
    app.use(express.urlencoded());
    


    现在关于您的发布路线,我对其进行了一些编辑:

    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);
      });
    
    });
    

    所以我添加了一个名为 config.js 的新文件,以便为您的所有 api 密钥、第三方服务的 url 提供参考。

    module.exports = {
      needle: {
        API_KEY: process.env.NEEDLE_API_KEY,
        URL: 'http://api.cortical.io:80/rest/text/keywords?retina_name=en_associative'
      }
    };
    

    因此,当您在控制台运行服务器时,您应该将设置值传递给名为 NEEDLE_API_KEY 的全局环境变量:

    NEEDLE_API_KEY=666 node app.js
    

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

    【讨论】:

      猜你喜欢
      • 2016-12-15
      • 2015-12-25
      • 2020-01-11
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多