javascript - 将 MySQL 结果写入路由文件

标签 javascript mysql node.js asynchronous repository

因此,通过一个名为 mobile.js 的文件,我创建了一个与数据库的连接,其中包含一个调用查询并返回一组手机的函数:

var mysql = require('mysql');
var pool = mysql.createPool({
    //database information
});

module.exports = 
{
    getAllModels: function()
    {
        pool.getConnection( function( err, connection )
        {
            connection.query("SELECT model FROM product", function( err, res, fie)
            {
                if( err ) throw err;
                connection.release();
                //console.log(res);
                return res;
            });
        });
    }
};

现在,取消注释上面的代码,我确实得到了一个 JSON 对象 [{model: 'LG'}, {model: 'Samsung'}, ...],但是当我尝试访问时index.js 路由文件中的该变量通过:

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

var mobileRepo = require('../repositories/mobile');

router.get('/', function(req, res, next) {
  var modeli = mobileRepo.getAllModels();
  console.log(modeli);

  res.render('index');
});

module.exports = router;

变量modeli将是未定义

通过我当前的研究,我知道发生这种情况是因为connection.query是一个异步/线程函数,但我在任何地方都找不到并且正在尝试弄清楚如何逃脱这个?

基本上,如何组合路由和连接结果,从而允许变量获取查询结果?

我也很乐意接受任何有关该主题或 Node.js 的好读物,因为我目前正在学习它!

感谢您的阅读!

编辑:我什至可以看到查询结果是在页面加载后传入的,但我仍然不知道如何让查询等待。

Tue, 10 Nov 2015 00:42:06 GMT expressnodejs:server Listening on port 3000
undefined <--- this is calling the result from index.js
GET / 200 72.216 ms - 179
[ { model: 'Samsung' }, { model: 'LG' } ] <--- calling result from mobile.js when query is done

我想到的一件事是创建一个结果函数:

module.exports = 
{
    getAllModels: function( outcome )
    {
        pool.getConnection( function( err, connection )
        {
            connection.query("SELECT model FROM product", function( err, res, fie)
            {
                //snip
                outcome( res );
}}}};

但这是否打破了 Node.js 为何如此之快的整个想法?

最佳答案

结果正是您所需要的,它称为回调,这是使异步代码工作的正确方法。

您还需要更改调用函数的方式。

mobileRepo.getAllModels(function(modeli){
    console.log(modeli);
    res.render('index');
});

关于javascript - 将 MySQL 结果写入路由文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620976/

相关文章:

node.js - 如何在socket.io nodejs服务器上列出房间

node.js - 为什么 request.query 不再是 'any' 了? express request.query typescript 错误

javascript - Vue.js 模型绑定(bind)到 jquery 输入

javascript - 如何从多个数组中提取来构建列表?

javascript 数字验证

javascript - html 字段集内部高度

mysql - 从出生日期计算带小数的年龄

mysql - 如何使用不级联删除其子项的外键创建 Django 模型?

php - MySQLi - 找不到用户

javascript - 将 100 万个对象发送到 Mongo DB,而不会耗尽内存