2015-06-28 1 views
1

Это мой код из моего index.js файла (с помощью экспресс-маршрутизации)Как передать источник изображения в нефрите из переменных в node.js

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; 

И это мой код из моего индекса. jade

extends layout 

block content 
h1= title 
p Welcome to #{title} 
ul 
    each user, i in userlist 
    li 
     p #{user.instaid} 
     p #{user.price} 
    li 
     img(src = "#{imgURL}") 

источник - это переменная, определенная в app.js, а затем используемая в моем файле index.js. Я знаю, что эта переменная имеет значение, потому что она печатает на console.log при запуске приложения. Однако изображение не загружается и вместо этого отображает вопросительный знак 404.

Если я копирую и вставляю источник изображения (то есть: http://naccrra.org/sites/default/files/default_site_pages/2013/instagram-icon.png), тогда изображение загружается отлично.

Что я здесь делаю неправильно?

Заранее благодарю вас за помощь.

+0

Когда вы просматриваете вкладку своей сети в своем браузере, выполняется ли запрос на изображение, как ожидается? И адрес правильный? – Brennan

+1

Почему вы передаете функцию 'source' в функцию обратного вызова' collection.find'? Я не думаю, что ты должен. Он все равно будет доступен для 'res.render', если вы этого не сделали. На самом деле я думаю, что он настроен на 'undefined' таким образом, что, скорее всего, ваша проблема. – laggingreflex

+0

Спасибо, laggingreflex, это была именно проблема. Я новичок в javascript, поэтому я не знал об этом, но это на 100% имеет смысл. Вы должны сделать свой комментарий ответом, чтобы я мог отметить его как ответ. – prcbass

ответ

0

Вы были принимать аргумент с тем же именем, что varible из внешней области имеет и которые вы намеревались использовать - source

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

Любой названный аргумент функции имеет приоритет над тем же именем переменной из внешний scope. Например:

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

Если ни одна переменная не передается при вызове, но это определение все еще занимает именованный аргумент, этот аргумент будет автоматически undefined, что это то, что происходит в вашем случае. Обратный вызов collection.find «s только когда вызывается с двумя аргументами - e и docs, любые sunsequent аргументы, если бы названные были установлены в undefined

Вы просто необходимой не принять, что дополнительный аргумент с именем, который был ненужным в первую очередь.

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