8

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

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

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

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

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

3 回答 3

9

You have to mention root as the second parameter of sendfile().

For example:

app.get('/:dir/:file', function(req, res) {
  var dir = req.params.dir,
      file = req.params.file;

  res.sendfile(dir + '/' + file, {'root': '../'});
});

You can find more details here: https://github.com/visionmedia/express/issues/1465

于 2014-03-11T21:08:21.397 回答
4

你需要使用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用于将文件“细粒度”传输到客户端。例如,请参阅 API 文档

于 2013-03-22T16:05:29.810 回答
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'));
});
于 2016-01-12T07:26:53.617 回答