javascript - 在 Node.js Express 服务器 : res. render(file.ejs, data) 中处理 GET 请求由于未定义数据而无法工作

标签 javascript node.js express request ejs

在 Node.js 中使用 Express 制作的服务器中,我有以下用于处理 GET 请求的代码:

function articleReturner(celien) { // function querying a database (celien is a string, cetarticle is a JSON)
    Article.findOne({ lien: celien}, function (err, cetarticle){ 
                console.log(cetarticle); // it works
                return cetarticle;
    });
}

app.get('/selection/oui/', function(req, res) { // the URL requested ends with ?value=http://sweetrandoms.com, for example
    var celien = req.param("value"); // 
    console.log(celien); // it works
    articleReturner(celien); // calling the function defined above
    res.render('selection_form.ejs', cetarticle); // doesn't work!
    });

我知道服务器正确获取了来自 URL 路由的数据,因为控制台正确显示了 celien(字符串)。我还知道函数articleReturner(celien)正在正确查询数据库,因为控制台正确显示cetarticle(JSON)。

但是 res.render('selection_form.ejs', cetarticle); 不起作用,控制台显示 ReferenceError: cetarticle is not Define...我是什么丢失的?谢谢!

最佳答案

函数articleReturner是异步执行的,并且return cetarticle;没有多大意义。您需要使用回调或 promise 。下面是使用回调从articleReturner返回结果的代码:

function articleReturner(celien, callback) { 
  Article.findOne({ lien: celien}, function (err, cetarticle){ 
            console.log(cetarticle); 
            callback(err,cetarticle);
 });
}

app.get('/selection/oui/', function(req, res) { 
  var celien = req.param("value"); // 
  console.log(celien); // it works
  articleReturner(celien, function(err, cetarticle){
    res.render('selection_form.ejs', cetarticle); 
  });
});

关于javascript - 在 Node.js Express 服务器 : res. render(file.ejs, data) 中处理 GET 请求由于未定义数据而无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23531685/

相关文章:

javascript - 我希望用户在我的 &lt;textarea&gt; 中看到换行符而不是 <br>

javascript - 如何从 JavaScript 外包 HTML 标签?

javascript - 如何使用 webpack 在 CSS 中内联字体?

javascript - 通过 app.js 连接到本地 MongoDB 服务器时遇到问题

javascript - 在 nodejs MySQL 的连接池中切换数据库

node.js - 当我启动基于 node.js 的站点时,是否有 list ?

javascript - 如何在 meteor 中使用 javaScript 将字符串放入粘贴缓冲区中?

node.js - 如何在Electron-Forge中成功高效地安装SQLite3?

node.js - Node Express 未发送自定义错误消息

javascript - 有没有办法限制 Node (Express) 的速度和响应时间?