【问题标题】:Express REST API response methods are not recognized无法识别 Express REST API 响应方法
【发布时间】:2016-10-01 08:01:48
【问题描述】:

我有一个非常简单的 get 请求,它返回我正在尝试实现的 json。我已按照 Express Web Framework REST API 的教程进行操作,但由于某种原因,我一直收到相同的错误

错误:

TypeError: res.status is not a function

TypeError: res.json is not a function

index.js:

 var express = require('express');
    var router = express.Router();
    var pg = require('pg');
    var connectionString = 'pg://postgres:postgres@postgres/feed';

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });

});

router.get('/api/leaderboard', function(resp, req){
  var results = [];
   pg.connect(connectionString, function(err, client, done){
       if(err){
         done();
         console.log(err);
         return res.status(500).json({ success: false, data: err});
       }
       var query = client.query("SELECT * FROM log WHERE (logged >= date_trunc('week', CURRENT_TIMESTAMP - interval '1 week') AND logged <= date_trunc('week', CURRENT_TIMESTAMP));");
       var counter = 0;
       var b1 = {};
       var b2 = {};
       var b3 = {};
       var b4 = {};
       b1.energy_sum_week = 0;
       b2.energy_sum_week = 0;
       b3.energy_sum_week = 0;
       b4.energy_sum_week = 0;
       b1.zne_sum_week = 30000;
       b2.zne_sum_week = 30000;
       b3.zne_sum_week = 30000;
       b4.zne_sum_week = 30000;
       query.on('row', function(row){
           //results.push(row);
                  if(row['address'] == 215){
                     b1.energy_sum_week = row['kitchen'] + row['plugload'] + row['lights'] + row['ev'] + row['hvac'] + row['instahot'] - row['solar'];
                   }
                   else if (row['address'] == 1590) {
                     b2.energy_sum_week = row['kitchen'] + row['plugload'] + row['lights'] + row['ev'] + row['hvac'] + row['instahot'] - row['solar'];

                   } else if (row['address'] == 1605) {
                     console.log(row);
                     b3.energy_sum_week = row['kitchen'] + row['plugload'] + row['lights'] + row['ev'] + row['hvac'] + row['instahot'] - row['solar'];

                   } else if (row['address'] == 1715) {
                     b4.energy_sum_week = row['kitchen'] + row['plugload'] + row['lights'] + row['ev'] + row['hvac'] + row['instahot'] - row['solar'];
                   }

       });
       query.on('end', function(){
         done();
         //make zne lower than everything
         results.push(b1);
         results.push(b2);
         results.push(b3);
         results.push(b4);
         resp.json(results);

       });

  });

});


module.exports = router;

它似乎无法识别响应对象。尝试了很多不同的事情,比如将请求和响应传递给查询回调,以及使用 Promise。 在这里有点绝望:/

【问题讨论】:

    标签: json node.js api rest express


    【解决方案1】:

    res 变量在当前上下文中不存在,您可能期望该行

    router.get('/api/leaderboard', function(resp, req){
    

    有这个表格

    router.get('/api/leaderboard', function(req, res){
    

    【讨论】:

    • 是的,我把它弄混了!我昨天找到了。应该在睡觉前发布现在我失去了代表:'(。但是非常感谢你:)
    • 还要小心意外地进行“覆盖”。我的问题是我正在使用基于 axios 承诺的请求,当我执行 then(res =&gt; {... 时,它会覆盖快速路由中的原始 res 对象。傻我。
    【解决方案2】:

    您将resp 作为req 对象和req 作为resp 对象传递。 尝试更改顺序。

      router.get('/api/leaderboard', function(req, resp){...}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2014-07-19
      • 2017-05-08
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多