过滤后,控制器中的LocomotiveJS访问响应JSON

时间:2014-05-08 21:20:36

标签: json node.js express locomotivejs

我正在寻找一种方法来访问""之后发送回请求者的JSON。过滤器控制器。

var locomotive = require('locomotive');

var myController = new locomotive.Controller();

myController.after('myAction', function(next) {
    var response = {};      //I want to access the JSON being sent back in myAction: {'hello':'world'}
    console.log(response);  //this should log "{'hello':'world'}"
    next();
});

myController.myAction = function myAction() {
    this.res.json({'hello':'world'});
}

module.exports = myController;

如果有人有任何办法,我们将非常感激。

2 个答案:

答案 0 :(得分:0)

在你的主要动作中,将你的json分配给一个对象(res保留):

myController.myAction = function myAction() {
    this.model = {'hello':'world'};
    this.res.json(this.model);
}

然后你可以在后过滤器中访问它:

myController.after('myAction', function(next) {
      var model = this.model;
      console.log(model);
      next();
});

答案 1 :(得分:0)

我找到了一个" hack"解决方案......它不是最干净的,并且需要在" node_modules" ...

中更改express response.js文件中的代码。

如果有人有更好的选择,你可以在控制器动作(或控制器过滤器)本身内访问响应请求的json,我非常感激。

感谢。


在〜/ node_modules / locomotive / node_modules / express / lib / response.js文件中,我修改了" res.json"函数(我的第174行)在声明body变量(传递给send函数)之后包含以下行。

this.responseJSON = body;

这允许您在过滤后在控制器中访问this.responseJSON,如下所示:

myController.after('myAction', function(next) {
    **var response = this.res.responseJSON;      //ACCESS RESPONSE JSON HERE!!!!!**
    console.log(response);                     //Now logs "{'hello':'world'}"
    next();
});
像我说的那样,不是最优雅的,而是在紧要关头完成工作。任何更优雅的解决方案都欢迎......