expressjs:从父目录发送文件

时间:2012-11-12 01:25:22

标签: javascript express sendfile

我想使用expressjs的sendfile从脚本文件的父目录发送文件。我试图做的是:

app.get('/', function(req, res){
    res.sendfile('../../index.html');
});

我收到一个禁止的错误,因为很明显,sendfile不信任路径遍历。到目前为止,我一直无法弄清楚如何更改通过sendfile发送的文件的目录。任何提示?

编辑:发帖时我有点累,实际上这很容易。我会把它留在这里以防万一其他人偶然发现这件事。 sendfile有一个选项参数,允许你这样做,如下所示:

app.get( '/', function( req, res ){
    res.sendfile('index.html', { root: "../../"});
});

3 个答案:

答案 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'));
});