mfox
mfox

Reputation: 77

meteor js how to write a file to disk from the server

I am writing a meteor package 'myPackage' which needs to write a file onto disk using Npm FileSystem and Pah modules. The file should end up in the example-app/packages/myPackage/auto_generated/myFile.js, where example-app project has myPackage added.

fs = Npm.require( 'fs' ) ;
path = Npm.require( 'path' ) ;

Meteor.methods( {
    autoGenerate : function( script ) {
        var myPath = '/Users/martinfox/tmp/auto-generated' ;
        var filePath = path.join(myPath, 'myFile.js' ) ;
                    console.log( filePath ) ;    // shows /Uses/martinfox/tmp/auto-generated/myFile.js 
        var buffer = new Buffer( script ) ;
        fs.writeFileSync( filePath, buffer ) ;
    },
} ); 

When I run the code above (server side only) I get

Exception while invoking method 'autoGenerate' Error: ENOENT, 
no such file or directory '/Uses/martinfox/tmp/auto-generated/myFile.js'

Note /Uses/martinfox/tmp/auto-generated folder does exist

  1. Any ideas what is going wrong?
  2. Is it possible to obtain the absolute path to the meteor projects directory?

Upvotes: 4

Views: 7306

Answers (2)

Pan Wangperawong
Pan Wangperawong

Reputation: 1250

If you are just looking for the absolute path for your app, you could simply do var base = process.env.PWD, which yields: /Users/[username]/[app-name]

This would avoid the extra stuff .meteor/local/build/programs/server

Upvotes: 4

Rebolon
Rebolon

Reputation: 1307

To get the path of your project you can do this : from main.js stored in the root of your app

var fs = Npm.require('fs');
__ROOT_APP_PATH__ = fs.realpathSync('.');
console.log(__ROOT_APP_PATH__);

You can also check if your folder exists :

if (!fs.existsSync(myPath)) {
    throw new Error(myPath + " does not exists");
}

Hope it will help you

Upvotes: 11

Related Questions