使用fs.readFile高频读取和fs.writeFile高频写入时,出现问题
发布于 10 年前 作者 gws321 8182 次浏览 最后一次编辑是 8 年前

我是建一个索引文件,用来做好友的模糊查询。但是在批量写入索引文件的时候,就会出现各种问题。 例如

    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接受字符串), 具体请看文档…

回到顶部