Node.js 当我尝试在Meteor应用程序中访问process.env.PWD时,它说它';没有定义
我刚刚开始在我的一个项目中试验Node.js和Meteor。 对于这个项目,我需要上传文件。因此,我已安装此软件包:。 在快速入门部分,我被要求将以下代码放在我的server/init.js文件中: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
//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
不是一种可靠的方法。