我无法理解为什么我得到这个“错误:ENOENT”错误。这是我的Meteor服务器方法:
createImage: function(coords) {
console.log('createImage')
console.log(coords.area)
console.log(coords.x)
console.log(coords.y)
console.log(coords.x2)
console.log(coords.y2)
console.log(coords.w)
console.log(coords.h)
var gd = Meteor.npmRequire('node-gd');
var path = Meteor.npmRequire('path');
var fs = Meteor.npmRequire('fs');
var source = 'forrest.png';
var target = 'compimages';
if (path.exists(target)) fs.unlink(target);
gd.openPng(source, function(png, path) {
if(png) {
console.log(png)
console.log(path)
}
}
);
}
以下是我在终端上获得的输出:
=> Meteor server restarted
I20140827-15:30:18.451(-7)? createImage
I20140827-15:30:18.455(-7)? 27888
I20140827-15:30:18.456(-7)? 242
I20140827-15:30:18.459(-7)? 164
I20140827-15:30:18.459(-7)? 410
I20140827-15:30:18.459(-7)? 330
I20140827-15:30:18.459(-7)? 168
I20140827-15:30:18.460(-7)? 166
W20140827-15:30:18.527(-7)? (STDERR) path.exists is now called `fs.exists`.
I20140827-15:30:18.547(-7)? { [Error: ENOENT, open 'forrest.png'] errno: 34, code: 'ENOENT', path: 'forrest.png' }
I20140827-15:30:18.548(-7)? undefined
这些是〜/ myapp / server /
中的目录me@ubuntu:~/myapp/server$ ls
compimages forrest.png privateimages server.js user-setup.js
我想访问forrest.png并使用node-gd根据传入的coords剪掉一部分。
据我所知,这个错误意味着缺少一个目录。我正在尝试访问的png文件与调用它的.js文件位于同一目录中(它们都在〜/ myapp / server /所以对我来说它看起来不像是问题。我唯一能做的就是看到路径是未定义的。我已经安装了它:
me@ubuntu:~/myapp/packages/npm/npm/node_modules$ ls
node-gd path
任何人都可以看到这是怎么回事?我正在使用Meteor 0.9.0
答案 0 :(得分:4)
如果您在服务器代码中console.log(process.cwd())
,您会注意到Meteor应用的当前工作目录为project/.meteor/local/build/programs/server
,但您的代码假定CWD为project/server
。
您可以做的是在路径前添加项目根服务器文件夹,该文件夹是通过在文件系统层次结构中进行5级升级获得的。
var projectRootServer="../../../../../server";
var source=projectRootServer+"forrest.png";
这不是很优雅但它有效。
不相关但似乎path.exists
已被弃用而不是fs.exists
,您也应该解决这个问题。