Meteor.js,将文档保存到文件

时间:2017-10-01 10:15:14

标签: node.js meteor

我正在尝试将文档保存到文件中,但似乎没有任何效果:

客户端:

AutoForm.hooks({
updateProjectForm:{
    onSuccess: function(){
        var json = JSON.stringify(thisProject, null, 2);
        console.log('saveUpdatedDoc client')
        Meteor.call('saveUpdatedDoc', thisProject._id, json);

        thisProject = null;
        //FlowRouter.go('/Projects/');
    }
  }
});

服务器:

Meteor.methods({
saveUpdatedDoc: function(projectDataArray, json){
    console.log(console.log('saveUpdatedDoc server'));
    var fs = Meteor.npmRequire('fs');
    var projId = projectDataArray;
    var json = json;
    console.log(projId);
    console.log(json);
    //console.log(fs);
    // fs.writeFile("/files/" + projName, json, function(err) {
    //  if(err) {
    //      return console.log(err);
    //  }
    //  console.log("The file was saved!");
    // });
}
}); 

正如你现在所看到的,它位于Meteor.npmRequire('fs');但我已经尝试过许多其他方法,如Npm.require('fs')和Meteor.require('fs'),并在所有方法上获得Meteor例外:

例如: 在Meteor.npmRequire('fs')我得到TypeError:Meteor.npmRequire不是一个函数 在Npm.require('fs');获取ReferenceError:未定义Npm on require('fs');得到错误:无法找到模块'fs',如果我正在尝试导入fs(从'fs'导入fs),那么所有应用程序在启动时崩溃。

我不知道该做什么,我只需要保存一个文件,这样其他没有连接到流星的过程就可以读取json文件并使用它但是不能做到这么简单的事情......

packages.js包含:

accounts-ui@1.1.9
accounts-password@1.4.0
aldeed:collection2-core
aldeed:autoform
check@1.2.5
dburles:collection-helpers
erasaur:meteor-lodash
fortawesome:fontawesome
fastclick
gwendall:auth-client-callbacks
kadira:flow-router
kadira:blaze-layout
matb33:bootstrap-glyphicons
raix:handlebar-helpers
spiderable
stolinski:stylus-multi
zimme:active-route
meteortoys:allthings
meteorhacks:npm

我真的坚持这个......应该这么简单...... 10X

1 个答案:

答案 0 :(得分:0)

这就像要求fs一样简单,fs是内置于节点的,因此不需要安装软件包,但它只能在服务器上进行,因为fs在客户端上是不可用的,或者如果是,将会给出错误。

所以在服务器方法中,如果你传递了一些json,你可以这样做:

  const fs = require('fs')
  Meteor.methods({
    if (Meteor.isServer)    
      saveMyJson(jsonData) {
        fs.WriteFile('/path/to/file.json',JSON.stringify(jsonData,null,2) , 
          (err) => {
             if (err) throw err;
               console.log('Saved '+outfile);
        });
      }
    })

在桌面上进行原型设计时这是正常的,但请记住,当您部署到docker实例时,文件系统将是只读的,因此您将无法执行此操作。