【问题标题】:send list of database rows like object to view in nodejs发送数据库行列表(如对象)以在 nodejs 中查看
【发布时间】:2018-04-19 15:50:06
【问题描述】:

我是nodejsexpressjs 的新手,我想对我的数据库表进行一些查询并在视图中显示结果,但我做不到:

var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var con = mysql.createConnection({
 host: "localhost",
 user: "root",
 password: "",
 database: "imanweb"
});

/* GET home page. */ 
router.get('/', function(req, res, next) {
let objects=['a','b']
con.connect(function(err){
 if(err) throw err;
 con.query("select * from tags", function (err, result) {
 if (err) throw err;
 result.forEach(function(element) {
 objects.push(element);
 console.log("Result: " + element.title);
  }, this);

  });
 })
 console.log("Array: " + objects);
 res.render('index', { title: 'Express' ,objs:objects});
});

module.exports = router;

其实这段代码的日志是这样的:

   Arr:a,b
    Get 200 /410.25 ms --196
    Result:php
    Result:.net

所以我的代码的最后一行似乎比过去的行(查询)运行得更快!

这有点像异步代码运行!。所以当我将objectsobjs 参数时。里面没有查询结果。

作为解决方案,我尝试使用then(),但我得到> undefined,然后我的代码出错了..

我该如何处理??

【问题讨论】:

    标签: mysql node.js typescript express


    【解决方案1】:

    这行得通吗?如果不尝试使用async 模块在您的代码中执行此forEach 方法。 我曾经遇到过这个问题,问题出在 forEach 上。

    【讨论】:

      【解决方案2】:

      您需要将res.render 函数放入回调中。像这样:

      con.connect(function(err){
        if(err) throw err;
        result.forEach(function(element) {
          objects.push(element);
        }
        res.render('index', { title: 'Express' ,objs:objects});
      }, this);
      

      如果您在回调之外发送响应,您的响应将立即发送 - 它不会等待异步函数。

      【讨论】:

      • 然后你必须嵌套回调。或者 - 正如我所推荐的 - 使用承诺库。然后你可以做thencatch - 并避免嵌套回调中的嵌套回调。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 2011-09-15
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多