#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;
Простая скрипка для демонстрации регулярного выражения: