javascript - For 循环在 Jade 中的 Node.js 中声明的变量在 Javascript 中不起作用

标签 javascript node.js for-loop express pug

我正在学习使用node.js和JADE,并且在使for循环在jade文件中的javascript中工作时遇到问题。我正在尝试用简单的代码来学习它。我正在将一个数组从数据库传递到 jade 文件。当我直接调用数组的特定元素 (var x = !{lat[2]};alert(x) 时它可以工作,但当我将它放入 for 循环中时它不会工作。这是我的 app.js代码:

app.get('/test', function(req, res){

getlat(function(err, lat){
    if(err){
      return res.send(500);
    }console.log(lat);
    res.render('test', {lat:lat});
  });

这是从数据库中检索纬度的位置:

var mongoose = require ('mongoose');
  function getlat(callback){
  var lat = new Array();
  mongoose.model('stories').find({},function(err, companies) {
    if(err){
      return callback(err, lat);
    }
    for (var i = 0; i < companies.length; i++) {
      lat[i] = companies[i].Lat;
    }
    return callback(null, lat);
 });
}
module.exports = getlat;

这是我的 Jade 文件:

body
   button.btn.btn-info Click Here! 
script.
  $('button').click( function() {
    for (var i = 0; i < 2; i++) {
      var x = !{lat[i]};
      alert(x);
    });
  });

如果有人告诉我我在哪里犯了错误,我将非常感激。 谢谢

最佳答案

问题是 lat 仅存在于服务器端,而 i 仅存在于客户端。

尽管两者都使用 JavaScript,但这两个环境仍然彼此分开管理,所有服务器端代码在客户端代码开始之前运行完成。

解决此问题的一个选项是将整个 lat 输出到 View 中的客户端变量,使用 JSON 和 JavaScript 的共享语法,并在客户端进行迭代。

script.
  $('button').click(function () {
    var lat = !{ JSON.stringify(lat) };

    for (var i = 0; i < 2; i++) {
      // ...
    }
  });

关于javascript - For 循环在 Jade 中的 Node.js 中声明的变量在 Javascript 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24186737/

相关文章:

javascript - 如何阻止 div 中的 onclick 事件传播到文档?

javascript - 用于处理更改的 React Props 而不是函数

javascript - NodeJS, Angular 2 |接下来在 Observable 上执行方法

javascript - Nodejs注册表未保存到mongodb数据库

java - 重构 - 简化 java 中的嵌套 for 循环

python - 理解循环中的 if 语句

javascript - 如何创建部分圆/弧?

javascript - 文件对话框不显示

javascript - 在默认 gulp 任务中使用询问器

python - 如何使用一个 for 循环来使用两个不同的 .format()