如何在模型和控制器之间传递一个查询结果

我的问题是以下几点:

我有nodejs + expressjs,然后用generator-express生成一个mvc项目,所以我有mysql + sequelize + gulp应用程序。

我连接到数据库,并在模型中查询,但我不能将结果传递给控制器​​,并在屏幕上打印。

而不是我得到一个错误,该variables是未定义的。

模型(regiones.js)的代码是:

module.exports = function (sequelize, DataTypes) { var regiones = sequelize.define('regiones', { idregion: DataTypes.INTEGER, nombre: DataTypes.STRING }, { classMethods: { encontrar : function(){ sequelize .query('SELECT * FROM regiones', { raw: true }) .spread(function(resul, m){console.log(resul); return resul;}); } } }); return regiones }; 

控制器(home.js)的代码是:

 var express = require('express'), router = express.Router(), db = require('../models'); module.exports = function (app) { app.use('/', router); }; router.get('/', function (req, res, next) { resu = db.regiones.encontrar(); console.log("resu is : "+resu); var arreglo = []; for(i=0;i<resu.length;i++){ arreglo.push(resu[i].nombre); } db.Article.findAll().then(function (articles) { res.render('index', { title: arreglo[1], articles: articles }); }); }); 

“地区”(对不起,因为西class牙语的名字)有“idregiones”和“nombre”。

基本上我想知道如何在控制器中得到查询的结果。

索引仅打印:

 Cannot read property 'length' of undefined TypeError: Cannot read property 'length' of undefined at C:\Users\Erick\farma1\app\controllers\home.js:15:17 at Layer.handle [as handle_request] 

和控制台打印模型中的所有元组,但在控制器打印:

 resu is : undefined 

我search了很多,但这似乎是我的一个理论问题。

谢谢 :)

你的encontrar函数不返回任何东西,这就是为什么你没有定义。

该查询是asynchronous的,所以你需要添加一个处理程序到返回的承诺:

 db.regiones.encontrar().then(function (resu) {...