如何从node.js中的变量传递jade中的图像源

时间:2015-06-28 22:04:39

标签: javascript node.js express pug

这是我的index.js文件中的代码(使用express for routing)

var hash = window.location.hash;
$('#1').hide();
$('#'+hash).show();

这是我的index.jade

中的代码
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res){
   var db = req.db;
   var collection = db.get('usercollection');
   var source = req.app.get('imgSource');
   console.log("IMG SOURCE: " + source);
   collection.find({},{},function(e,docs,source){
     res.render('index',{
      "userlist" : docs,
      "imgURL" : source,
      "title": "Insta-Famous"
     });
   });
});

module.exports = router;

source是一个在app.js中定义的变量,然后在我的index.js文件中使用。我知道这个变量有一个值,因为它在我启动应用程序时打印到console.log。但是图像不会加载,而是显示404问号。

如果我复制并粘贴图像源(即http://naccrra.org/sites/default/files/default_site_pages/2013/instagram-icon.png),则图像加载正常。

我在这里做错了什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您接受的参数名称与外部范围的变量具有相同的名称以及您打算使用的参数 - source

var source = req.app.get('imgSource');
collection.find({},{},function(e,docs,source){
 ...
});

函数的任何命名参数优先于外部作用域的同名变量。例如:

var a = 1;
var b = 2;
function fn(a){
    a //=> 'precedence'
    b //=> 2
}
fn('precedence');

如果在调用时没有传递变量,但定义仍然采用命名参数,那么该参数将自动为undefined,这就是您的情况。 collection.find的回调只能使用两个参数调用 - edocs,任何后续参数(如果已将其设置为undefined

你根本不需要采取额外的命名参数,这首先是不必要的。

var source = req.app.get('imgSource');
collection.find({},{},function(e,docs){
 ...
});