如何在Express/Jade中迭代和解析查询中的JSON?

3

我是新手,正在学习Node.js,所以我认为这很简单,但我无法找到一种方法将从select查询中获取的JSON数据传递给Jade视图。我使用Node.js Tools for Visual Studio创建项目,该项目使用Express + Jade。下面是我的index.js文件:

exports.products = function (req, res) {
var request = new sql.Request(connection);
console.log("Connection successful.");
request.query('SELECT * FROM product', function (err, data) {
    console.log(data[i]);
    res.render('products', {
        title: 'Products', 
        year: new Date().getFullYear(), 
        message: 'Products page with all devices',
        name: 'Rodney',
        result: data[i]
    });    
});

这是我在Jade中使用的视图来呈现结果:
- product = typeof(result) != 'undefined' ? result : { }
for p in product
  h3 #{product.Name}

我遇到了错误i未定义,如果我把它改成result:data [0],那就只能显示一条记录。这是JSON的结构示例: { Id: 56, Name: 'Motion', ModelString: '1234-G', Description: 'Motion Front Door', Released: true, BoardId: 29, CreateDate: Wed Aug 05 2015 06:29:31 GMT-0500 (Central Daylight Time), SerialNumberCode: 'AAA', ExtensionId: 9, SKU: '1234-G', CurrentTest: false, ModelEncodingNumber: -1 } 如何展示所有带有列name的记录?

i 定义在哪里? - Ruan Mendes
2个回答

1
您实际上可以直接将数据传递给您的res.render方法,如下所示:
res.render('products', {
    ...
    products: data
});

// in view.jade
for p in product
    h3 #{product.Name}

如果您只需要产品名称,可以先循环遍历数据,收集名称并将其存储在另一个列表中:
var allNames = data.map(function(element) {
    return element.Name;
})

res.render('products', {
    ...
    names: allNames
});  

// view.jade
for name in names
    h3 #{name}

非常好!我使用了你的第二种方法,效果很棒。谢谢! - Rodney Wilson

0
你试过直接传递 data 吗?

编辑:

希望这个可行。

- productList = typeof(result) != 'undefined' ? 
result : { }
for product in productList
  for p in product
    h3 #{p.Name}

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Rodney Wilson
我对“数据”的结构进行了猜测。我更新了我的答案。 - jkris
我更改了 result: data 并在 Jade 侧添加了您的代码,现在在 acorn.js 文件中出现了 Unexpected token 错误。 - Rodney Wilson
如果您能在问题中提供"data"的输出内容,那将更有帮助。 - jkris
好的。你可以再试一次吗?我做了一个小改动。 - jkris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接