Я использую nodejs с модулем expressjs для создания веб-сервера. Моя текущая установка такова

var express = require("C:/Program Files/nodejs/node_modules/express")
var app = express();
var server = require('http').createServer(app).listen(80);
var io = require('C:/Program Files/nodejs/node_modules/socket.io').listen(server, {log:false});
var path = require("path");
fs = require("fs");

Есть ли способ использовать

app.use(function(req,res,next){
//code
})

Чтобы узнать, откуда пришел запрос? Например, если на странице html у вас есть тег скрипта

<script src="test.js"></script>

Он отправляет запрос на получение test.js, могу ли я использовать аргумент req, чтобы увидеть, что запрос на test.js пришел с html-страницы, и получить полный путь к файлу html-страницы?

РЕДАКТИРОВАТЬ: я пытаюсь написать функцию, которая обслуживает правильный индексный файл (index.html / .htm / .php и т. Д., Если вы просто вводите каталог в URL-адрес ("localhost / tests / chat /"), но проблема то есть, когда он запрашивает файл javascript со страницы индекса, он возвращается на 1 каталог слишком далеко (поиск "localhost / tests / test.js" вместо "localhost / tests / chat / test.js"), и только работает, если вы напрямую вводите имя файла в URL-адрес ("localhost / tests / chat / index.html"). Моя функция:

app.use(function(req,res,next){
    var getFullPath = path.join("public",req.path);
    console.log(req.path);
    if (fs.existsSync(getFullPath)) {
        if (fs.statSync(getFullPath).isDirectory()) {
            getFullPath = path.join(getFullPath,"index.html");
        }
        res.sendfile(getFullPath);
    } else {
        res.send("404 Not Found");
    }
});

Я понимаю, ты можешь использовать

app.use(express.static(__dirname + '/public'));

Но это создает для меня проблему с моим настраиваемым модулем парсера php, так что на самом деле это не вариант

2
Greg Hornby 4 Фев 2014 в 09:20

1 ответ

Лучший ответ

Мне удалось использовать req.headers.referer, чтобы узнать, откуда был запрошен файл javascript, и, следовательно, указать правильное расположение файла javascript.

getFullPath = path.join("public",req.headers.referer.split(req.host)[1],path.basename(req.path));
1
Greg Hornby 4 Фев 2014 в 11:22