Nodejs / Expressjs javascript:获取请求的来源

时间:2014-02-04 05:20:20

标签: javascript node.js express

我正在使用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”) ,仅在您直接在文件名中键入文件名(“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 个答案:

答案 0 :(得分:1)

我能够使用req.headers.referer来获取javascript文件的位置,因此指向javascript文件的正确位置。

getFullPath = path.join("public",req.headers.referer.split(req.host)[1],path.basename(req.path));