Обслуживание статических файлов в Node.js с использованием node-static
Я собрал элементарное приложение Node и пытаюсь избежать ненужных зависимостей (особенно express
) в образовательных целях. Тем не менее, я столкнулся с проблемой, пытаясь обслуживать статические файлы, такие как изображения или CSS. По соображениям безопасности я выбрал нод-статический код вместо собственной версии, но, похоже, не могу все правильно подключить.
Файловая структура
index.js
router.js
server.js
requestHandlers.js
package.json
views/
index.jade
public/
image.jpg
Индекс
var server = require("./server"),
router = require("./router"),
requestHandlers = require("./requestHandlers");
var handle = {
"/": requestHandlers.index
};
server.start(router.route, handle);
requestHandlers
var jade = require("jade");
function index(response) {
response.writeHead(200, {"Content-Type": "text/html"});
var body = jade.renderFile("views/index.jade");
response.write(body);
response.end();
}
exports.index = index;
сервер
var http = require("http"),
url = require("url"),
static = require("node-static"),
port = Number(process.env.PORT || 8888);
var fileServer = new static.Server("./public");
function start(route, handle) {
function onRequest(request, response) {
// NODE STATIC CODE - NOT WORKING
request.addListener('end', function () {
fileServer.serve(request, response);
}).resume();
// ROUTE HANDLING - WORKING
var pathname = url.parse(request.url).pathname;
route(handle, pathname, response);
}
http.createServer(onRequest).listen(port);
}
exports.start = start;
маршрутизатор
function route(handle, pathname, response) {
if (typeof handle[pathname] === 'function') {
console.log("Request handler " + pathname + " was called.");
handle[pathname](response);
} else {
console.log("No request handler found for " + pathname);
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found");
response.end();
}
}
exports.route = route;
Наконец, мой индексный файл вызывает img(src="public/image.jpg")
хотя я тоже пробовал просто image.jpg
а также public/image
, /
Маршрут вызывается и обрабатывается соответствующим образом, но когда файл индекса пытается загрузить изображение, else
Блок моего обработчика запросов ударил (как и ожидалось, так как у меня нет маршрута для него), и больше ничего не происходит. Может кто-нибудь объяснить, пожалуйста, правильный способ использования node-static
в этом случае?