【问题标题】:Why Variable is undefined in nodejs express为什么在nodejs express中未定义变量
【发布时间】:2018-02-14 20:48:24
【问题描述】:

我正在使用 node js express 并从控制器调用模型。当我调用模型表单控制器并在结果变量中获取结果并将其打印在 console.log(result) 中时,它是 undefined

控制器

var user_model=require('../models/user');

exports.get_user = function(req, res) {

    var result = user_model.get_users();

    console.log(result);
}

型号

var connection=require('../config/connection');

exports.get_users = function() {

    connection.query('SELECT * FROM users', function(err, rows) {
        if(err) {
            retrun err;
        }
        return rows;
    });
}

【问题讨论】:

标签: node.js express


【解决方案1】:

发生这种情况是因为您在查询完成之前对结果进行了调整。节点是异步的。与 php 不同,节点在进入下一行之前不会等待查询完成。

【讨论】:

  • 那我该怎么办
  • 第一件事是你可以使用同样的承诺,但如果你不想使用承诺,那么你可以创建等待结果的方法,即
  • var connection=require('../config/connection'); export.get_users = function() { connection.query('SELECT * FROM users',function(err,rows ){ if(err) { retrun err; } getData(rows); }); } 函数 getData(rows) { 返回行; }
【解决方案2】:

使用 promise 处理异步调用

// **Controller** 
var user_model = require('../models/user');

exports.get_user = function (req, res) {

    user_model.get_users().then((result) => {
        console.log(result);
    }).catch(err => console.log(err));
}

// **Model** 
var connection = require('../config/connection');
exports.get_users = function () {
    return new Promise((resolve, reject) => {
            connection.query('SELECT * FROM users', function (err, rows) {
                if (err) {
                    reject(err);
                }
                resolve(rows);
            });
        }
    })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2014-04-24
    • 2018-06-29
    相关资源
    最近更新 更多