Обслуживание статических файлов в 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 в этом случае?

0 ответов

Другие вопросы по тегам