使用fs.readFile高频读取和fs.writeFile高频写入时,出现问题
我是建一个索引文件,用来做好友的模糊查询。但是在批量写入索引文件的时候,就会出现各种问题。 例如
undefined:945
})
^
SyntaxError: Unexpected token }
at Object.Function (<anonymous>)
at /Volumes/macFile/nodeProject/cngouwo/routes/api/addFriend.js:21:23
at fs.js:266:14
at Object.oncomplete (fs.js:107:15)
Process finished with exit code 8
不仅仅这一个错误。各种各样的错误。 不知道为何如此?
代码奉上:
var fs = require('fs'),
util = require('util');
module.exports = function(req,res){
var id = req.body.id,
name = req.body.name,
friend = {};
fs.readFile('out.txt',function(err,data){
if(err){
var _collection = friend.collection = {},
_index = friend.index = {};
}
else{
var friends = data.toString();
friend = (new Function("return "+friends))();
var _collection = friend.collection,
_index = friend.index;
}
_collection['id_'+id] = name;
for(var x = 0 ; x < name.length ; x++){
if(!_index[name[x]])
_index[name[x]] = {};
if(!_index[name[x]]['id_'+id]){
_index[name[x]]['id_'+id] = {};
_index[name[x]]['id_'+id]['s'] = 1;
_index[name[x]]['id_'+id]['i'] = [x];
}else{
_index[name[x]]['id_'+id]['s'] += 1;
_index[name[x]]['id_'+id]['i'].push(x);
}
};
var json = util.inspect(friend,false,4);
fs.writeFile("out.txt", json, function(err) {
friend = null;
json = null;
if(err){
res.send('失败')
}else{
res.send({ms:'cd'})
}
});
});
}
8 回复
求大神帮助
顺便说一下,报错服务终止后,重新启动服务,从报错的数据继续写,就又可以跑。。
friend = (new Function("return "+friends))();
这句出现的问题吧?
这个应该是数据还没写完你又继续读, writeFile的时候应该没有锁住文件读的, 你可能才写了一半就开始读了!
在回调里面写的writeFile,应该是在readFile结束后才开始write的吧。
friend = (new Function("return "+friends))();
这句好费解。什么意思啊 为什么这样用
@usherwong 难道你不是有多个调用同时产生? 只有一个调用? 一个调用肯定不可能
没有什么费解的啊 new Function方法可以定义一个function(function body接受字符串), 具体请看文档…