EBADF, read

时间:2023-03-10 03:21:02
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;