Javascript 从路由器传递对象/数组时出错
我将Jade作为节点中的视图引擎进行探索,花了3个小时无法将对象(来自数据库的响应)传递到Jade视图而不会出错 从我的路由器Javascript 从路由器传递对象/数组时出错,javascript,node.js,express,pug,Javascript,Node.js,Express,Pug,我将Jade作为节点中的视图引擎进行探索,花了3个小时无法将对象(来自数据库的响应)传递到Jade视图而不会出错 从我的路由器all是一个包含对象的数组: var router = express.Router(); router.get('/all', function(req, res){ db.findAll().then(function(all){ res.render("index", { creators: all }); }); }); 玉景:
all
是一个包含对象的数组:
var router = express.Router();
router.get('/all', function(req, res){
db.findAll().then(function(all){
res.render("index", { creators: all });
});
});
玉景:
doctype html
html
head
title my jade template
body
.comment_list
each el in creators
p= el.creator
正如你所见,这很简单。我已经看过20多个使用Jade的例子,并且也这么做了,但总是会出现以下错误:
> TypeError: index.jade:7
5| body
6| .comment_list
> 7| each el in creators
8| p= el.creator
Cannot read property 'length' of undefined
直到我最后尝试在creators中的每个el之前检查if(typeof(creators)!=“undefined”)
,猜猜看。。。魔法发生了。错误消失了
我写这篇文章是为了向所有与同一问题斗争的人提供参考,同时我想问一下这个错误的原因是什么,为什么在Jade的文档中没有提到在遍历集合之前应该检查未定义的内容 在Jade中,在尝试对变量进行操作之前检查变量是否存在是一种常见的模式 从以下内容的Jade文档: 要迭代的对象或数组只是普通的JavaScript,因此它可以是变量、函数调用的结果或几乎任何其他内容
在引擎盖下,Jade正在使用标准JavaScript在您调用
每一个
时进行更新
因此,试图对不存在的东西调用每个,就像试图做:
for(var i=0; i < undefined.length; i++) { ... }
for(var i=0;i
哪些错误是因为length
不是undefined
的真实属性
完全理解您的沮丧,因为它处理未定义的数据让很多JavaScript用户感到痛苦。嘿@Steven Schobert,谢谢您的解释!但是为什么没有定义?我正在传递一个现有对象,但是如果没有if/check,它就会抛出错误。我真的看不出这种行为背后的逻辑。你确定每次都传递一个数组吗?尝试将
console.log(all)
放在render
调用之前。是的,如果我将console.log(all)放在render调用之前Steven Schobert 9小时前还未定义,但如果我声明:h2=创建者,它将毫无问题地渲染/打印整个对象。但是,如果我想从creators对象获取特定对象,它会抛出错误。你如何在评论中突出显示代码片段?对不起,我不确定我是否理解你的问题。记录时,all
的值是多少?(对内联代码使用backticks`
for(var i=0; i < undefined.length; i++) { ... }