Node.js/Express.js JavaScript:获取请求的来源

3

我使用nodejs和expressjs模块创建web服务器。 我的当前设置如下:

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页面的完整文件路径吗?

编辑:我正在尝试编写一个函数,如果您只输入url中的目录(“localhost/tests/chat/”),则提供正确的索引文件(index.html/.htm/.php等),但问题是,当它从索引页面请求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解析器模块带来问题,所以这并不是一个真正的选择。

1个回答

1
我可以使用req.headers.referer获取JavaScript文件被请求的位置,从而指向JavaScript文件的正确位置。
getFullPath = path.join("public",req.headers.referer.split(req.host)[1],path.basename(req.path));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接