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的更多相关文章

  1. 根据linux内核源码查找recv返回EBADF(errno 9)的原因

    linux的内核版本是2.6.18,x86_64. man里的解释是: EBADF The argument s is an invalid descriptor 我的模拟测试环境是: 前端loadr ...

  2. windows pm2 启动nodejs失败:Error: EBADF: bad file descriptor, uv_pipe_open

    windows下打开命令窗口,安装pm2:npm install pm2 -g pm2成功安装,在项目目录下用pm2启动服务:pm2 start index.js,结果启动失败,错误如下: .pm2\ ...

  3. java.net.SocketException: recvfrom failed: EBADF (Bad file descriptor)

    1. 问题说明: 与服务器之间进行socket通信的时候,客户端关闭socket之后,会抛出一个IOException,异常信息如下: java.net.SocketException: recvfr ...

  4. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  5. linux poll函数

    poll函数与select函数差不多 函数原型: #include <poll.h> int poll(struct pollfd fd[], nfds_t nfds, int timeo ...

  6. Linux ERRNO

    摘自Linux-3.18.20的头文件include/uapi/asm-generic/errno-base.h和include/uapi/asm-generic/errno.h: #define E ...

  7. Android中基于CGroup的memory子系统HAL层分析-lmkd

    Android在内存管理上于Linux有些小的区别,其中一个就是引入了lowmemorykiller.从lowmemorykiller.c位于drivers/staging/android也可知道,属 ...

  8. 《UNIX环境高级编程》笔记——1.UNIX基础知识

    这一章节侧重一些基本概念和书中用到的一些名词. 一.引言 所有的操作都提供服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储区以及获得当前时间等. 二.UNIX体系结构 其实linux常见 ...

  9. C++ 系列:socket 资料收集

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

随机推荐

  1. web框架--MVC、MTV

    一.MVC框架: MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:[1] Model(模型)表示应用程序核心(比如数据库记 ...

  2. c++文件的输入输出

    emmm,错误地方还请指出(以下代码复制粘贴会报错,我用codeblocks测试过,不知道为什么qaq) 头文件#include < fstream > 这里ofstream是" ...

  3. web前端学习笔记:文本属性

    今天的web前端笔记主要讲述文本属性,希望能帮助到正在学习web前端开发的初学者们,废话不多说了,一起来看看文本属性的相关内容吧. 文本属性 文本缩进 将Web页面上的一个段落第一行缩进,这是一种最常 ...

  4. BZOJ 1874 取石子游戏 - SG函数

    Description $N$堆石子, $M$种取石子的方式, 最后取石子的人赢, 问先手是否必胜 $A_i <= 1000$,$ B_i <= 10$ Solution 由于数据很小, ...

  5. Qt5+VS2010的安装及使用

    在我的博客<Win7下Qt5的安装及使用>中讲解了win7下Qt5+MinGW的安装及使用,本节再讲解win7下Qt5+VS2010的安装及使用.利用Qt5+MinGW开发应用程序比较麻烦 ...

  6. 一种基于URL数据源的WEB报表插件

    完全支持所见所得的报表设计, 支持 PHP ,Java 等所有支持JSON格式的后端. 立即下载测试版本 需要正式版本?请QQ联系:1565498246 或者留言

  7. 事务 TRANSACTION

    事务是数据库中一个但单独的执行单元(Unit),他通常由高级数据库操作语言(如SQL)或编程语言(如C++.Java)编写的用户程序的执行所引起.当在数据库中更改数据成功时,在事务中更改的数据便会提交 ...

  8. Configuration Reference In Vue CLI 3.0

    Configuration Reference This project is sponsored by  #Global CLI Config Some global configurations ...

  9. robot framework 中should be true 与should contain 的区别

    should be true  是否等于:判断是否should contain  是否包含 a是否包含b

  10. js中的find(),filter(),has()的用法和区别

    filter():操作当前元素集,删除不匹配的元素,得到一个新的集合 <ul> <li class="a">list item 1</li> & ...