Я создаю свое первое приложение Node.js MVC (собственный узел, а не экспресс) и не удается отобразить изображения из моих html-файлов по их пути.Отображение изображений по относительной траектории в Node.js
Я избавлю вас мой server.js и router.js код, но вот мой контроллер код, который в основном, как Im загрузки мои взгляды:
var fs = require("fs");
var controller = require("controller");
var load_view = 'view_home';
var context = { foo : 'bar' };
controller.load_view(res, req, fs, load_view, context);
это переходит в руки ...
var url = require('url');
var Handlebars = require('handlebars');
function load_view(res, req, fs, view, context, session){
// Files to be loaded, in order
var files = [
'view/elements/head.html',
'view/elements/header.html',
'view/' + view +'.html',
'view/elements/footer.html'
];
// Start read requests, each with a callback that has an extra
// argument bound to it so it will be unshifted onto the callback's
// parameter list
for(var i=0; i<files.length; ++i)
fs.readFile(files[i], handler.bind(null, i));
var count = 0;
function handler(index, err, content) {
// Make sure we don't send more than one response on error
if(count < 0) return;
if(err) {
count = -1;
console.log('Error for file: ' + files[index]);
console.log(err);
res.writeHead(500);
return res.end();
}
// Reuse our `files` array by simply replacing filenames with
// their respective content
files[index] = content;
// Check if we've read all the files and write them in order if
// we are finished
if(++count===files.length) {
res.writeHead(200, { 'Content-Type': 'text/html' });
for(var i = 0; i < files.length; ++i) {
var source = files[i].toString('utf8');
// Handlebars
var template = Handlebars.compile(source);
var html = template(context);
res.write(html); /* WRITE THE VIEW (FINALLY) */
}
res.end();
}
} // handler()
} // load()
Наконец, вот мой HTML с тегом и относительный путь в атрибуте SRC:
<div class="help">
<img src="../public/img/test.jpg" />
</div>
Мой фи le, поскольку она относится к приведенному выше, выглядит следующим образом:
Я уверен, что относительный путь правильный, но пробовал все комбинации относительного пути и даже абсолютного пути. Тем не менее изображение не отображается.
Исходя из фона LAMP, доступ к изображениям в дереве файлов является тривиальным, но я понимаю, что сервер настроен по-другому здесь (так как я был тем, кто его настроил).
Я получаю доступ к другим файлам (например, таблицам стилей) в файловой системе, создавая отдельный контроллер для загрузки этих файлов в явном виде и доступа к этому контроллеру с использованием URI. Но этот подход непрактичен для неопределенного количества изображений.
Как получить доступ к & Показать мои изображения в файловой системе с помощью Node.js?
Вы понимаете, что node.js по умолчанию не поддерживает файлы NO, ничего из файловой системы. Таким образом, для каждого изображения, которое вы хотите использовать из файловой системы, вам необходимо убедиться, что он покрыт обработчиком маршрута для вашего HTTP-сервера. Для статических файлов и использования такой структуры, как Express, вы обычно используете 'express.static()', чтобы сказать express, чтобы искать любые файлы с определенным префиксом пути в определенной иерархии подкаталогов на вашем жестком диске. – jfriend00
И, как правило, вы не хотите использовать относительные пути, потому что они относятся к URL-адресу страницы, на которой вы находитесь, что обычно усложняет вещи больше, чем упрощает. Как правило, вы должны использовать что-то вроде '/ public/img/test.jpg', и вы используете обработчик маршрута, который видит любой префикс '/ public', а затем ищет, что остальная часть пути в определенной иерархии подкаталогов. – jfriend00
И многое из кода, который вы показываете в своем вопросе, может исчезнуть, если вы используете экспресс-поддержку и встроенную поддержку, с которой имеют рули. – jfriend00