gpt4 book ai didi

mysql - 为什么我无法在 Node js 项目中获取从模型到 Controller 的返回值?

转载 作者:行者123 更新时间:2023-11-29 10:21:49 24 4
gpt4 key购买 nike

我正在尝试以 MVC 模式实现 Nodejs 项目

我的项目文件夹结构是:

enter image description here
我的 Controller userController.js 看起来像:

var usersModel = require('../models/users');

module.exports.list=function(req,res){
var rows = usersModel.getAll();
console.log(rows);
res.render('index',{
title:"Customers - Node.js",
data:rows
});
}

我的模型 users.js 如下:

var connection = require('../config');    
module.exports = {
getAll: function() {
connection.query('SELECT * FROM users', function (err, rows) {
console.log(rows); // its showing the records in cmd
if (err)
console.log("Error in Query:", err);
else
return rows;
})
}
};

Route 文件:

var express = require('express');
var router = express.Router();

var userController = require('../controllers/userController');

/* GET home page. */
router.get('/', userController.list);

module.exports = router;

在这里,我无法在 Controller 中获取模型方法的结果行。这个问题有什么解决办法吗?

最佳答案

connection.query(...) 是异步的,因此在从数据库检索值之前调用 res.render() 。您应该研究 Promise、回调函数或异步等待来处理这些情况。您将在 Node 中经常使用它们。

例如,要在 getAll 函数中返回一个 Promise:

getAll: function() {
return new Promise(function(resolve, reject) {
connection.query('SELECT * FROM users', function (err, rows) {
console.log(rows); // its showing the records in cmd
if (err)
reject(err)
else
resolve(rows);
})
})
}

并修改 Controller 的返回值:

function(req,res) {
usersModel.getAll()
.then(function(rows) {
console.log(rows);
res.render('index',{
title:"Customers - Node.js",
data:rows
});
})
.catch(function(error) {
// Handle error here
})
}

关于mysql - 为什么我无法在 Node js 项目中获取从模型到 Controller 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49140050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com