Meteor:错误:尝试使用node-gd访问图像时ENOENT

时间:2014-08-27 22:54:43

标签: javascript node.js meteor

我无法理解为什么我得到这个“错误: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

1 个答案:

答案 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,您也应该解决这个问题。