如何使用模型和控制器

时间:2015-06-19 03:09:23

标签: javascript node.js model-view-controller express sequelize.js

我的问题如下:

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

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

而不是我得到一个错误,即变量未定义。

model(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

};  

controller(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
            });
        });
});

&#34; regiones&#34; (抱歉,因为西班牙语中的名字)有&#34; idregiones&#34;和&#34; nombre&#34;。

基本上我想知道如何在控制器中获取查询结果。

索引仅打印:

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

我经常搜索,但这似乎是我的理论问题。

谢谢:)

1 个答案:

答案 0 :(得分:1)

你的encontrar函数没有返回任何内容,这就是你未定义的原因。

查询是异步的,因此您需要为返回的promise添加处理程序:

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