Node.js 当我尝试在Meteor应用程序中访问process.env.PWD时,它说它';没有定义

Node.js 当我尝试在Meteor应用程序中访问process.env.PWD时,它说它';没有定义,node.js,meteor,Node.js,Meteor,我刚刚开始在我的一个项目中试验Node.js和Meteor。 对于这个项目,我需要上传文件。因此,我已安装此软件包:。 在快速入门部分,我被要求将以下代码放在我的server/init.js文件中: //file:/server/init.js Meteor.startup(function () { UploadServer.init({ tmpDir: process.env.PWD + '/.uploads/tmp', uploadDir: process.env.PW

我刚刚开始在我的一个项目中试验Node.js和Meteor。 对于这个项目,我需要上传文件。因此,我已安装此软件包:。 在快速入门部分,我被要求将以下代码放在我的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
  })
});
问题:我的进程.env.PWD未定义,这显然会在我尝试上载文件时使应用程序崩溃。 在node.js提示符下,我试图访问process变量(它起作用了)、process.env变量(它再次起作用了),最后是process.env.PWD变量(未定义)

我已经将程序包所需的不同目录的路径硬编码为一个解决方案,并且成功地上传了文件(但它不是很平滑,因为我需要为其他环境更改该路径)

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


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

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

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

我知道这有点晚了。。。但是我已经关注这个有一段时间了,它是上传包中的一个bug,PWD在Meteor中不再有效。在Windows上,您可以预先创建目录(我正在使用meteor\u bootstrap.serverDir获取基本目录,然后从那里备份到应用程序根目录)。但是您不能调用CheckCreateDirectory,因为(请参阅用户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',
  })
});

…但您必须先预创建目录。

我知道这有点晚了。。。但是我已经关注这个有一段时间了,它是上传包中的一个bug,PWD在Meteor中不再有效。在Windows上,您可以预先创建目录(我正在使用meteor\u bootstrap.serverDir获取基本目录,然后从那里备份到应用程序根目录)。但是您不能调用CheckCreateDirectory,因为(请参阅用户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',
  })
});
…但您必须先预创建目录。

您可以使用:

 var homeDir = process.env.HOMEPATH;
 tmpDir: homeDir + '/uploads/tmp'`
您可以使用:

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

不幸的是,这似乎不起作用。
process.cwd()
返回Windows格式的路径,当Meteor重新启动时,该路径会导致中断错误<代码>错误:Enoint,没有这样的文件或目录“C:\C:\Dev\file\u upload\.meteor\local\build\programs\server”(双字母“C:\”不是一个拼写错误^^^^^),不幸的是,这似乎不起作用。
process.cwd()
返回Windows格式的路径,当Meteor重新启动时,该路径会导致中断错误<代码>错误:Enoint,没有这样的文件或目录“C:\C:\Dev\file\u upload\.meteor\local\build\programs\server”(双精度“C:\”不是打字错误^^)process.env.HOMEPATH可能在某些平台上未定义,就像process.env.PWD可能指向不同的位置或也未定义一样。process.env.HOMEPATH可能在某些平台上未定义,就像process.env.PWD可能指向不同的位置或也未定义一样。我们最终决定使用
/opt/projectname
文件夹。它们在部署时不会被覆盖,您可以将任何驱动器映射到文件夹等。使用
process.env.PWD
不是一种可靠的方法。我们最终决定使用
/opt/projectname
文件夹。它们在部署时不会被覆盖,您可以将任何驱动器映射到文件夹等。使用
process.env.PWD
不是一种可靠的方法。