expressJS:分离路由,模型,从模型导出属性到路由到异步工作?

时间:2014-04-04 09:39:16

标签: javascript node.js express

我是js / nodejs / express的新手,并且我自己尝试在类似MVC的模式中构建我的文件

问题是 console.log (在routes.js,最重要的)返回 undefined ,而第二个返回实际数据,并由同样,节点如何以异步方式将数据从模型返回到路径?

在我的server.js

require('./modules/pos/routes')(app);
require('./modules/pos/models/inventory')(app);

在我的routes.js

module.exports = function(app) {
    Inventory = require('./models/inventory')(app);
    app.get('/poss', function(req, res) {
        var result = Inventory.get();
        console.log('result1 is',result); // !
        res.end(JSON.stringify(result));
    });
}

在我的inventory.js

module.exports = function(app) {
    return {
        get : function() {
            var res;
            app.conn.query('SELECT * FROM users', function(err, rows) {
                res = JSON.stringify({users : rows});
                console.log("result is ",res); // !
                return res;
            });
        }
    }
}

P.S在终端中执行node server,并浏览到localhost:8000给出

result1 is undefined

result is {"users":[{"id":1, "username": ...blah..

1 个答案:

答案 0 :(得分:2)

你的第一个console.log在第二个之前执行。并且get方法不返回任何内容,因为返回的方法是get内的方法。为了使您的方法async添加回调,如下所示:

// inventory.js
module.exports = function(app) {
  return {
    get : function(cb) {
      app.conn.query('SELECT * FROM users', function(err, rows){
        if (err) {
          return cb(err);
        }
        res = JSON.stringify({users : rows}); 
        console.log("result is ", res);  
        cb(null, res)
      });
    } 
  };
};

// routes.js
module.exports = function(app) {

  var Inventory = require('./models/inventory')(app);

  app.get('/poss', function(req, res) {

    Inventory.get(function (err, result) {
      if (err) {
        // do something else in case of error
        return;
      }
      res.end(result); // you don't need to use json stringify here cause the result is serialized
    });
  });

}