我无法将var从控制器传递到带有Nodejs的视图。
目前,我使用快递,这是我的路线定义
var mongoose = require('mongoose');
var search = mongoose.model('products');
exports.findByName=function(req, res){
var regex = new RegExp("^"+req.params.id, 'i');
search.find(
{'name': regex}, function(err, result) {
if(err) return res.send(500, err.message);
res.status(200).json(result);
});
};
searchController有这段代码:
res.render('search', { test: 'test' });
使用mongoose正确连接到mongoDB。如果我在控制器中使用console.log(res),我会获得一个非常简洁的JSON文件(超过500行!),但是我无法在数据库中找到查询结果。
我从数据库中取出一个空数组,我已经与Postman核对了。这意味着问题不在数据库中:
拥有这么长的JSON文件是否正常?我知道我可以使用第二个参数将数据发送到视图我如何通过res.render('search', { 'test': 'test' });
将控制器中的查询传递给视图,但是在视图中测试也是未知的,无论我是否也写{{1 }}
谢谢!
感谢Mike的回答,我已将我的代码重构为以下内容:
app.get('/search/:id', function(req,res){
searchController.findByName(req, res);
});
exports.findByName=function(req, res){
var regex = new RegExp("^"+req.params.id, 'i');
search.find(
{'name': regex}, function(err, result) {
if(err) return res.send(500, err.message);
console.log(result); //--> NEW console.log inside controller, works
res.render('search', {'result': result});
});
};
现在结果是一个空数组(这是数据库中正确的值)但仍未在视图中呈现此变量。
search.jade
include search.php
search.php
<script>
var productsJSON = result;
</script>
感谢Mike的回答(再次),我正在取得一些进展。现在我的控制器是:
exports.findByName=function(req, res){
var regex = new RegExp("^"+req.params.id, 'i');
search.find(
{'name': regex}, function(err, result) {
if(err) return res.send(500, err.message);
res.render('search', {'pageData': {'result' : result}});
});
};
我已将&#39; 添加到pageData,因为我认为必须在那里。
现在我的观点是:
search.jade
include header.php
script.
var productsJSON = #{pageData.result}
但是没有用,我发现了以下错误:
我试图遵循in this page显示的一些技巧,但根本不起作用。
答案 0 :(得分:1)
命中此端点时,您正在响应两次。您正在发送包含res.render('search', { test: 'test' });
和res.status(200).json(result);
的回复。
尝试移动res.render('search', { test: 'test' });
代替res.status(200).json(result);
。然后,您将只有一次机会从此端点做出响应。
大型JSON响应对象是正确的。这就是响应对象的样子。它应该包含一些像上面例子中那样的东西。
要在Jade模板中显示您的数据,您需要使用this answer中所述的以下语法。
这样回答:
res.render('search', {pageData: {'result' : result}});
然后在你的模板中渲染如下的值:
#{pageData.result}
如果希望它们显示在模板中,您需要在#{}
中包装从服务器端传递的任何变量。