EBADF, read

nodejs读取文件出的一个错误,解决不了,自己技术还达不到,解决不了这么高深的问题。

描述:需要记录访问的人数,每个人随机到的酒。打算用json文件来存储:read count write count; read user write user,结果出现了如下问题。

网上能找到的相关答案:http://www.tuicool.com/articles/2Qn2Un

以后的打算:

1、尽量避免用file来存储,需要频繁并发访问的数据;

2、nodejs一出错就挂了,所以需要好好研究下异常处理

错误提示:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: EBADF, read
    at Error (native)

错误代码: 

var express = require('express');
var router = express.Router();
var fs = require('fs');
var path = require('path');
var util = require('util');

var wine_data = [
    {
        "name":"熊猫精酿生姜金色艾尔",
        "money":50,
        "reason":"暖心向,极品云备胎",
        "reason-1":"备胎不易。赏50元,来熊猫精酿喝杯",
        "reason-2":"别暖了TA,冷了自己",
        "href":"http://weidian.com/item.html?itemID=1623850670&wfr=wx&from=singlemessage&isappinstalled=1",
        "image":"shengjiang.png"
    }
];

function selectResult(ran, res, uname){
    if(ran < 3){        
        res.render('result', {
            uname: uname,
            wname: wine_data[ran].name,
            reason: wine_data[ran].reason,
            reason1: wine_data[ran]["reason-1"],
            reason2: wine_data[ran]["reason-2"],
            money: wine_data[ran].money,
            href: wine_data[ran]["href"]
        });
    }else{                
        res.render('result-n', {
            uname: uname,
            wname: wine_data[ran].name,
            reason: wine_data[ran].reason            
        });
    }
}

/* GET home page. */
router.get('/', function(req, res, next) {

    var count_path = path.join(process.cwd(), '/public/data/count.json');

    fs.readFile(count_path, function(err, data){
        if(err){
            console.log('err:'+err);
        }else{
            // console.log('data:'+data);
        }

        var data_json = JSON.parse(data);
        var count = data_json.count;
        count++;

        res.render('index', {
            count:count
        });

        data_json.count = count;

        fs.writeFile(count_path, JSON.stringify(data_json, function(key, value){return value;}, 4), function(err){
            
            if(err){
                console.log('add count fail:'+err);
            }else{
                // console.log('del success');
            }

        });   //writeFile end

    });  //readFile end
    
});

router.get('/result', function(req, res, next) {

    var user_path = path.join(process.cwd(), '/public/data/user.json');
    var uname = req.query.uname;

    fs.readFile(user_path, function(err, data){
        if(err){
            console.log('err:'+err);
        }else{
            // console.log('data:'+data);
        }

        var data_json = JSON.parse(data);        
        if(data_json[uname] !== undefined){
            // 存在
            var ran = +data_json[uname];

            selectResult(ran, res, uname);            

        }else{
            // 不存在
            var ran = parseInt(data.length*Math.random());

            data_json[uname] = ran;

            selectResult(ran, res, uname);            

            fs.writeFile(user_path, JSON.stringify(data_json, function(key, value){return value;}, 4), function(err){
            
                if(err){
                    console.log('add user fail:'+err);
                }else{
                    // console.log('add user success');
                }

            });   //writeFile end

        }// 是否存在 结束       

    });  //readFile end

});

module.exports = router;

 

posted on 2015-11-16 18:05  j.w  阅读(1241)  评论(0编辑  收藏  举报