当我尝试在我的 Meteor 应用程序中访问 process.env.PWD 时,它说它是未定义的。



我刚刚开始在我的一个项目中尝试使用Node.js和Meteor。对于这个项目,我需要上传文件。因此,我安装了这个包:meteor-uploads。在快速开始部分,我被要求把这段代码放在我的server/init.js文件中:

//file:/server/init.js
Meteor.startup(function () {
  UploadServer.init({
    tmpDir: process.env.PWD + '/.uploads/tmp',
    uploadDir: process.env.PWD + '/.uploads/',
    checkCreateDirectories: true //create the directories for you
  })
});

问题:my process.env。PWD未定义,每当我尝试上传文件时,这显然会使应用程序崩溃。使用node.js提示符,我尝试访问进程变量(它工作),进程。env变量(它再次工作),最后是process.env。PWD变量(未定义).

我已经硬编码了包所需的不同目录的路径,这是一个工作,文件被上传(但它不是很平滑,因为我需要在其他环境中更改它)。

但是我无法理解为什么我没有一个process.env.PWD。如果有人有任何想法或问题,请成为我的客人(提前感谢)。

编辑:哦,我试着在网上找答案,但没有成功,因此我缺乏理解。

如果您想要当前工作目录而不是依赖可能丢失的环境变量,请使用process.cwd()

您可以使用:

 var homeDir = process.env.HOMEPATH;
 tmpDir: homeDir + '/uploads/tmp'`

我知道这有点晚了…但我一直在追逐这个一段时间,这是一个bug在上传包和PWD不再在流星工作。在Windows上,您可以预先创建目录(我使用meteor_bootstrap)。serverDir获取基础,然后从那里备份到应用程序根目录)。但是你不能调用checkCreateDirectories,因为https://github.com/tomitrescak/meteor-uploads/issues/66(见我的评论下的用户genyded有详细信息)。

所以,在这个问题得到解决之前,如果你想在应用程序根目录下…

var fs = Npm.require('fs');
var path = Npm.require('path');
var meteor_root = fs.realpathSync(__meteor_bootstrap__.serverDir + '/../' );
var application_root = fs.realpathSync( meteor_root + '/../' );
// if running on dev mode
if( path.basename( fs.realpathSync(meteor_root + '/../../../' ) ) == '.meteor'){
    application_root =  fs.realpathSync( meteor_root + '/../../../../' );
}
Meteor.startup(function () {
  UploadServer.init({
    tmpDir: application_root + '/../../../../../.uploads/tmp',
    uploadDir: application_root + '/../../../../../.uploads',
  })
});

最新更新