我想使用expressjs的sendfile从脚本文件的父目录发送文件。我试图做的是:
app.get('/', function(req, res){
res.sendfile('../../index.html');
});
我收到一个禁止的错误,因为很明显,sendfile不信任路径遍历。到目前为止,我一直无法弄清楚如何更改通过sendfile发送的文件的目录。任何提示?
编辑:发帖时我有点累,实际上这很容易。我会把它留在这里以防万一其他人偶然发现这件事。 sendfile有一个选项参数,允许你这样做,如下所示:
app.get( '/', function( req, res ){
res.sendfile('index.html', { root: "../../"});
});
答案 0 :(得分:6)
您必须提及root作为sendfile()
的第二个参数。
例如:
app.get('/:dir/:file', function(req, res) {
var dir = req.params.dir,
file = req.params.file;
res.sendfile(dir + '/' + file, {'root': '../'});
});
您可以在此处找到更多详细信息: https://github.com/visionmedia/express/issues/1465
答案 1 :(得分:2)
您需要使用express.static
。
假设您已设置以下目录:
/app
/buried
/deep
server.js
/public
index.html
然后您应该具有以下Express配置:
var express = require('express');
var server = express.createServer();
server.configure(function(){
server.use(express.static(__dirname + '../../public'));
});
server.listen(3000);
res.sendfile
用于“更细粒度”地将文件传输到客户端。 See API docs for example
答案 2 :(得分:2)
父文件夹: -app -routes.js -index.html 在上面的例子中,将以下代码添加到routes.js以从父目录发送文件。
var path=require("path") //assuming express is installed
app.get('/', function(req, res){
res.sendFile(path.join(__dirname + '/../index.html'));
});