標籤:
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;
EBADF, read