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;
EBADF, read的更多相关文章
- 根据linux内核源码查找recv返回EBADF(errno 9)的原因
linux的内核版本是2.6.18,x86_64. man里的解释是: EBADF The argument s is an invalid descriptor 我的模拟测试环境是: 前端loadr ...
- windows pm2 启动nodejs失败:Error: EBADF: bad file descriptor, uv_pipe_open
windows下打开命令窗口,安装pm2:npm install pm2 -g pm2成功安装,在项目目录下用pm2启动服务:pm2 start index.js,结果启动失败,错误如下: .pm2\ ...
- java.net.SocketException: recvfrom failed: EBADF (Bad file descriptor)
1. 问题说明: 与服务器之间进行socket通信的时候,客户端关闭socket之后,会抛出一个IOException,异常信息如下: java.net.SocketException: recvfr ...
- hadoop 2.7.3本地环境运行官方wordcount
hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...
- linux poll函数
poll函数与select函数差不多 函数原型: #include <poll.h> int poll(struct pollfd fd[], nfds_t nfds, int timeo ...
- Linux ERRNO
摘自Linux-3.18.20的头文件include/uapi/asm-generic/errno-base.h和include/uapi/asm-generic/errno.h: #define E ...
- Android中基于CGroup的memory子系统HAL层分析-lmkd
Android在内存管理上于Linux有些小的区别,其中一个就是引入了lowmemorykiller.从lowmemorykiller.c位于drivers/staging/android也可知道,属 ...
- 《UNIX环境高级编程》笔记——1.UNIX基础知识
这一章节侧重一些基本概念和书中用到的一些名词. 一.引言 所有的操作都提供服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储区以及获得当前时间等. 二.UNIX体系结构 其实linux常见 ...
- C++ 系列:socket 资料收集
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
随机推荐
- Centos Raid0 与Raid1 的备注
http://www.360doc.com/content/13/1209/21/14661619_335823338.shtml raid0 如果坏了一块硬盘.那么数据就无法读取了 raid1 如果 ...
- Getting svn to ignore files and directories
August 27, 2013Software Developmentresources, subversion, svn, tutorial, version control Who knew it ...
- maven install 找不到符号问题
看报错信息是找不到 javax.servlet 包 .这个是tomcat 内的jar包.但是我build path 查看是加了tomcat 的.. 最后在pom.xml 添加依赖 <depend ...
- powerdesigner mysql逆向工程注释不显示问题
- js 事件创建发布
// 创建事件. var event = document.createEvent('Event'); // 初始化一个点击事件,可以冒泡,无法被取消 event.initEvent('click', ...
- spring学习 十 schema-based 异常通知,和环绕通知
一 schema-based异常通知 第一步:创建通知类 :新建一个类实现 throwsAdvice 接口,throwsAdvice接口只是标记接口里面并没有任何方法,必须自己写方法,且必须叫 aft ...
- 过河卒(NOIP2002)
题目链接:过河卒 直接模拟?会T掉60分. 所以我们可以采用递推,怎么想到的? 因为卒子只能向下或向右走,所以走到一个点的方法数,等于走到它上面点的方法数加上走到它左边点的方法数,这样就可以地推了. ...
- RNN模型(递归神经网络)简介
有些任务可以通过MLP多层感知器的神经网络,CNN卷积神经网络解决,因为那些任务内部的每一个前后无关联,无顺序,如MNIST手写数字子集,CIFAR子集等. 但是在自然语言处理中,每个字的前后有语义联 ...
- unity3d的执行顺序
- 【转】centos7 搭建etcd集群
转自http://www.cnblogs.com/zhenyuyaodidiao/p/6237019.html 一.简介 “A highly-available key value store for ...