2013-12-01 4 views
4

Я пишу метеорный пакет 'myPackage', который должен записать файл на диск с использованием модулей Npm FileSystem и Pah. Файл должен заканчиваться в примере-app/packages/myPackage/auto_generated/myFile.js, где в проекте приложения-приложения добавлен myPackage.meteor js как записать файл на диск с сервера

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) ; 
    }, 
}); 

Когда я запускаю код, указанный выше (на стороне сервера только) я получаю

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

Примечание/Использование/martinfox/TMP/автоматически генерируемый папка существует

  1. Любые идеи, что идет не так?
  2. Можно ли получить абсолютный путь к каталогу проектов метеоров?
+1

Вы уверены, что ваша директория начинается с/использованию, а не/пользователей? –

+0

Кроме того, что касается вашего второго вопроса, __dirname даст вам имя каталога, в котором выполняется текущий скрипт, находится в –

+0

@CBlanchard Извините, мой плохой опечаток Вопрос 1 теперь работает, но я, похоже, не могу получить var filePath = path .join (__dirname + 'test, myFile.txt) – mfox

ответ

9

Чтобы получить путь вашего проекта вы можете сделать это: из main.js, хранящихся в корневом каталоге вашего приложения

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

Вы также можете проверить, если папка существует:

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

Надеюсь, это поможет вам

+0

Мне пришлось сделать вашу первую строку var fs = Npm.require ('fs'), чтобы избежать «неопределенной ошибки» на «require ('fs')». Затем я получил путь «/Users/martinfox/Desktop/WEB-DEV/METEOR/Managers/my-example/.meteor/local/build/programs/server», из которого я смог извлечь и включить «/ my-example/'из возвращаемого __ROOT_APP_PATH__, чтобы получить корневую папку проекта приложения, что именно то, что мне нужно, спасибо и ответили. – mfox

+0

Я изменил запрос на его исправление. Еще одна вещь, каждый раз, когда вы запускаете метеорит, она удаляет предыдущую установку, поэтому вам нужно хранить файлы вне папок метеоритов. но это было то, что вы ожидали делать с/Users ... – Rebolon

+0

Предположим, что я написал helloworld.txt в __ROOT_APP_PATH__ Как хранить файлы за пределами метеорных папок, предпочтительно/публично? Благодарю. –

4

Если вы ищете абсолютный путь для своего приложения, вы можете просто сделать var base = process.env.PWD, что дает: /Users/[username]/[app-name]

Это позволит избежать дополнительный материал .meteor/local/build/programs/server

+1

намного проще. благодаря! – FullStack

+0

Но у вас возникнут проблемы после сборки вашего приложения, потому что в приложении для пакета нет 'process.env.PWD'. – paulequilibrio

+0

@paulequilibrio просто сохраните его как глобальную переменную, прежде чем она будет в комплекте –

Смежные вопросы