Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?
like image 220
mfox Avatar asked Dec 07 '22 04:12

mfox


2 Answers

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

like image 150
Rebolon Avatar answered Dec 27 '22 01:12

Rebolon


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

like image 39
Pan Wangperawong Avatar answered Dec 27 '22 01:12

Pan Wangperawong