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;
浙公网安备 33010602011771号