开发者问题收集

在 Node Express 中获取路由器内部查询

2016-07-21
620

基本上,每次有 get 请求时,我都想在路由器内部进行查询。 我尝试了这个和一些变体

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

router.get('/:listaId', function (req, res, next) {
if (error) return next(error);
var cc = new pg.Client({
    user: "@@",
    password: "@@",
    database: "@@",
    port: 5432,
    host: "@@",
    ssl: true
});
client.connect(function (err) {
    if (err) {
        return console.error('could not connect to postgres', err);
    }
    cc.query('select * from userls', function (err, result1) {

        console.log("Ok", result1.rows, err)

    })
})
res.render('mas', {
    title: 'Lista',
    subtitle: 'CreateBla',
    subs: 'a',
    lev: 's'
})})

但查询从未被调用,基本上它直接进入渲染。

我如何在渲染之前等待查询的答案? 这是一种错误的方法吗?

1个回答

How can i wait the answer of the query before rendering? Is it a wrong approach?

您必须将 res.render() 放在已知数据的查询回调中:

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

router.get('/:listaId', function (req, res, next) {
    if (error) return next(error);
    var cc = new pg.Client({
        user: "@@",
        password: "@@",
        database: "@@",
        port: 5432,
        host: "@@",
        ssl: true
    });
    client.connect(function (err) {
        if (err) {
            return console.error('could not connect to postgres', err);
        }
        cc.query('select * from userls', function (err, result1) {

            console.log("Ok", result1.rows, err)
            res.render('mas', {
                title: 'Lista',
                subtitle: 'CreateBla',
                subs: 'a',
                lev: 's'
            })

        })
    })
})

此外,您的代码看起来有点奇怪,您在一个地方使用 client 而在另一个地方使用 cc ,您应该检查 cc.query() 回调中的错误,并且您可能希望在渲染中使用查询结果。

jfriend00
2016-07-21