【问题标题】:how can I access the uploadDir attribute of express?如何访问 express 的 uploadDir 属性?
【发布时间】:2013-03-22 03:34:46
【问题描述】:

在 express app.js 中我定义了 uploadDir = "./tmp",但我以后如何访问它?

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));

  app.use(express.bodyParser({uploadDir:'./tmp', keepExtensions: true})); // <--

  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

【问题讨论】:

  • 使用文件系统方法来访问文件...比如 fs.read 等
  • 你指的是哪个文件?我的意思是config变量uploadDir,它最初来自node-formidable(connect使用强大而express使用connect,因此该变量也被express间接使用),但我不知道如何从express访问它。从强大到可能是 IncomingForm.uploadDir
  • 如果上传的表单是这样的... ' 那么它可以访问为 var tmp_path = req.files.avatar.path;
  • 但是,只有当我上传时才有可能,之前是什么?我想从 express 那里得到它,smth。比如:express.uploadDir 或 app.get('uploadDir')

标签: node.js express connect formidable


【解决方案1】:

bodyParser 等中间件的参数直接传递给中间件。所有的 Express 中间件都是由 Connect 提供的,所以它甚至对 Express 一无所知。 uploadDirmultipart middlewaremultipart 闭包中被捕获。它通过闭包存储,从不存储在其他任何地方,也不会传递给 Express,因此访问原始值的唯一方法是将其作为最初传入的 options 对象的一部分进行访问。没有其他方法。

如果您希望通过阅读app(正如您在评论中所说)可以访问该值,那么您应该自己单独设置它。也就是说,这种方法有点丑陋,意味着你必须设置两次值。

app.set('uploadDir', './tmp');

【讨论】:

  • 这是否意味着,我什至不需要通过中间件设置'uploadDir':app.use(express.bodyParser({uploadDir:'./tmp', keepExtensions: true}));?所以app.set('uploadDir', './tmp'); 已经这样做了,还是只是我为应用设置的一个属性?
  • @static 不,你仍然需要将它传递给bodyParser。中间件不了解应用,应用也不了解中间件(通常)。
  • 嗯,不是我想要的。所以如果我要更改uploadDir - 我需要做两次,或者我需要编写一个包装方法来设置它两次。
  • 如果你想改变值,你为什么不把它放在问题中!这是一个 XY 问题:meta.stackexchange.com/questions/66377/what-is-the-xy-problem 由于这个问题已经按照您最初的要求得到了回答,请提出一个新问题来解释您实际想要做什么。
  • 1.属性uploadDir 不是连接,而是强大的模块 2. 没有链接/证明“没有其他方法”,还是我解释错了? 3.app.set('uploadDir', './tmp')app.use(express.bodyParser({uploadDir:'./tmp', keepExtensions: true})):第一个uploadDir和第二个除了名字没有任何共同之处,所以你只是提供了一个难闻的解决方案(我认为这里的人更专业)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2013-06-20
  • 2016-03-16
  • 1970-01-01
相关资源
最近更新 更多