如何使用Routes和Controller将数据显示为JSON?

时间:2018-09-07 12:29:29

标签: javascript node.js

我想使路由与控制器分开。

我的路线是:

'use strict';
module.exports = function(app) {
  var controller = require('../controllers/controller');

  app.route('/').get(controller.index);
};

控制器是:

exports.index = function() {
  request = new Request(
    "MYQUERY",
    function(err, rowCount) {
      if (err) {
        console.log(err);
      } else {
        console.log(rowCount + ' rows');
      }
      connection.close();
    }
  );

  request.on('row', function(columns) {
    columns.forEach(function(column) {
      if (column.value === null) {
        console.log('NULL');
      } else {
        console.log(column.value);
      }
    });
  });

  connection.execSql(request);
};

我可以在终端控制台中看到结果,但是我想将其作为JSON返回给http。如果我使用控制器并一起路由,则可以使用以下内容:

router.get('/about', function (req, res) {
  res.send('About this wiki');
})

2 个答案:

答案 0 :(得分:1)

.get(或任何路由器请求处理程序)的回调函数至少需要两个参数:requestresponse。您可以通过示例看到这一点:

router.get('/about', function (req, res) {
  res.send('About this wiki');
})

您可以重写此代码,使回调成为命名函数而不是匿名函数:

const aboutHandler = function (req, res) {
  res.send('About this wiki');
});

router.get('/about', aboutHandler);

您的controller.index是同一种函数,因此它将使用这两个参数。您只需更改功能即可使用它们:

exports.index = function (req, res) {

这将使您能够访问res,并且如果您通过累积行来构建JSON对象,则可以根据需要使用它来通过res.sendres.json发送响应结果。您可以使用request.on('end' ...来知道查询何时发出了所有结果。

答案 1 :(得分:0)

我可能会误解您的问题,但是您是说res.json(...);吗?