如何在模型和控制器之间传递一个查询结果
我的问题是以下几点:
我有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) {...