Javascript 我能';当i';m渲染

Javascript 我能';当i';m渲染,javascript,node.js,Javascript,Node.js,这是我的密码: app.get('/index/:name',function(req, res){ connection.query('SELECT * FROM deneme',function(err, rows, fields){ if (err) throw err; var paragraf = rows; }); res.render('index', { title: req.params.name,

这是我的密码:

app.get('/index/:name',function(req, res){
    connection.query('SELECT * FROM deneme',function(err, rows, fields){
        if (err) throw err;
        var paragraf = rows;
    });

    res.render('index', {
        title: req.params.name,
        para: paragraf
    });
});
但节点无法从“res.render”内部访问“pararaf”变量。节点返回

ReferenceError:未定义Pararaf


如何从异步函数外部访问Pararaf变量?

这不是异步方法结果的使用方式,因为在调用查询回调之前,行将不可用

请尝试:

app.get('/index/:name', function(req, res){
    connection.query('SELECT * FROM deneme', function(err, rows, fields){
        ...

        res.render('index', {
            title: req.params.name,
            para: rows
        });
    });
});

这样,一旦结果(行)可用,您就可以访问并呈现它们。

以上代码只是示例,我还要查询两个sql查询。这是一种方式,但只适用于“一个”查询。如果要进行多个查询并希望呈现某种最终结果,则应链接回调函数。您还可以使用async()之类的库来帮助您完成此任务。请记住,节点遵循异步模型,当您调用“query”时,代码将继续执行下一行代码(调用“res.render”),它不会等待结果,这就是您需要将回调传递给查询函数的原因。不,您不能。如果将其定义为全局,则res.render可以找到变量,但在调用res.render时,变量值很可能未定义,因为在执行查询回调之前,数据将不可用。从某种意义上说,如果没有(github.com/caolan/async),我无法同时使用三个mysql查询?请更新您的问题,以查看至少到个查询,以充分了解您的问题。您可以在不异步链接回调的情况下执行相同的操作:connection.query(…,function(){connection.query(…,function(){…})