我正在尝试将文档保存到文件中,但似乎没有任何效果:
客户端:
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
答案 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实例时,文件系统将是只读的,因此您将无法执行此操作。