我尝试迁移节点项目以在浏览器中运行。项目(永远不要理解当下的原因)写入一个临时文件,使用带有与此类似的代码的temp:
var temp = require('temp');
var fs = require('fs');
temp.open('helloworld.txt', function (err, info) {
if (err) {
console.log('Failed to open a temp file:', err);
return;
}
console.log('temp: ', info.path);
fs.writeFile(info.path, 'Hello World!', function (err2) {
if (err2) {
console.log('Failed to write to a temp file:', err2);
return;
}
});
});
运行浏览器化代码时出现以下错误:
未捕获的TypeError:undefined不是函数
以下一行:
fs.open(filePath, RDWR_EXCL, 0600, function(err, fd) {
由temp.open
调用。
我非常清楚你不能用普通的文件来编写文件。浏览器中的javascript,但我想知道浏览器是否有一些替代品,特别是因为我们正在讨论临时文件。
我找到了browserify-fs,并尝试了:
browserify -r fs:browserify-fs my-example.js -o bfied.js
但我得到完全相同的错误。我尝试用require('fs')
替换require('browserify-fs')
,但这也导致了类似的错误(我当然安装了browserify-fs模块..)
任何建议的解决方案都将不胜感激:)如果无法进行此类迁移,我也很高兴知道..
谢谢!
答案 0 :(得分:3)
我偶然发现了这篇文章,因为我觉得我试图和你完全一样。我不知道你到底在哪里,但我发现使用browserify-fs时,你无法访问浏览器沙盒状态之外的文件。
所以在尝试时...
var fs = require('broserify-fs);
fs.read('hello.txt', 'utf8' ....
我得到了和你一样的错误,但这样做的时候......
fs.mkdir('/home', function() {
fs.writeFile('/home/hello-world.txt', 'Hello world!\n', function() {
fs.readFile('/home/hello-world.txt', 'utf-8', function(err, data) {
console.log(data);
});
});
});
一切正常(我认为只使用临时文件)。
我对此非常陌生,所以我不确定最好的方法是什么。我想你要么在本地运行Node.js服务器并向它发出ajax命令来执行读/写操作,要么调查HTML5文件系统的东西 - 这看起来好文章 - http://www.html5rocks.com/en/tutorials/file/dndfiles/
希望能得到一些帮助(对不起,你必须等待2个月才能得到答案;)这是偶然的,我碰巧偶然发现了你的问题,当没有答案时我的心就沉了下来。)
汤姆