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

时间:2015-06-05 14:17:58

标签: node.js meteor

我刚开始尝试使用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
  })
});

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

我已经硬编码了程序包所需的不同目录的路径作为解决方案并且工作正常,文件已上传(但它不是很平滑,因为我需要为其他环境更改它)。

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

编辑:哦,我试图在互联网上找到答案而没有任何成功,因此我缺乏理解。

3 个答案:

答案 0 :(得分:2)

您可以使用:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我知道这有点晚了...但我已经追了一段时间了,这是上传软件包中的一个错误,而且在Meteor中不再使用PWD。在Windows上,您可以预先创建目录(我使用 meteor_bootstrap .serverDir来获取基础,然后从那里备份到应用程序根目录)。但由于https://github.com/tomitrescak/meteor-uploads/issues/66,您无法调用checkCreateDirectories(请参阅我的用户genyded下的评论,其中包含详细信息)。

所以,在问题得到解决之前,如果你想在app root中找到一些东西......

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

...但你必须先预先创建dirs。