Как разрешить пути в узле

#node.js #filepath

#node.js #путь к файлу

Вопрос:

У меня запущен сервер узлов, и я пытаюсь выяснить, как передавать пути к файлам на моих серверах (и как отвечать на запросы get для этих ресурсов), чтобы у меня был статический файловый сервер, но тот, которым я могу управлять на основе параметров запроса ( POST или GET и т. Д.). Прямо сейчас моя файловая структура настроена следующим образом ( dir_ означает каталог):

 Main Folder:
    server.js
    dir_content:
           home.html
           style.css
           dir_uploads:
               dir_finished:
                    file1.txt
                    file2.txt
 

Чтобы отвечать на мои запросы, мой код выглядит следующим образом:

 http.createServer(function(request, response) {

if(request.method.toLowerCase() == 'get') {
    var filePath = './dir_content'   request.url;
    if (filePath == './dir_content/') {
        filePath = './dir_content/home.html';
    }
fs.exists(filePath, function (exists) {
        if (exists) {
            fs.readFile(filePath, function (error, content) {
                if (error) {
                    response.writeHead(500);
                    response.end();
                }
                else {
                    response.writeHead(200, {'Content-Type': contentType});
                    response.end(content, 'utf-8');
                }
            })
 

Это позволяет мне отвечать на любые GET запросы веб-страниц с правильной страницей (если она существует), но в конечном итоге искажает путь к ресурсу на моем сервере.

Пример: кто-то пытается получить file1.txt бы перейти к localhost:8080/dir_content/dir_uploads/dir_finished/file1.txt

но мой код добавит дополнительное ./dir_content к их запросу, что сделает его похожим на то, что они пытались посетить:

localhost:8080/dir_content/dir_content/dir_uploads/dir_finished/file1.txt

Есть ли более простой способ предоставить точные абсолютные пути к ресурсам в папках БЕЗ внешних модулей узла (каким-то образом установив базовый каталог)?

Комментарии:

1. Просто используйте библиотеку path узла: nodejs.org/api/path.html#path_path_resolve_from_to

Ответ №1:

На первый взгляд кажется, что вы не учитываете URL-адрес запроса, возможно, включающий префикс dir_content . Если это действительно так, то я бы рекомендовал простой тест регулярного выражения, чтобы увидеть, есть ли он там:

 if (!/^[/]?dir_content//i.test(request.url))
    filePath = '/dir_content'   request.url;

filePath = '.'   filePath;
 

Простая скрипка для демонстрации регулярного выражения:

http://jsfiddle.net/97Q43/