node对文件的操作
node对于json文件的操作:
此实例是基于express的,不要问我为啥一个简单的读写也用express。 因为我懒;
一、引入fs及express模块并实例化express;
其中express需要安装:
实例化express:
二、匹配首页的get请求,并指定端口
到这里可以测试一下是否成功;
控制台执行:
打开浏览器,访问 localhost:3000:
OK,启动成功;
三、匹配访问用户列表的请求:
现在我们创建一个resource文件并在它下面创建一个user.json文件; 初始为一个空的数组:
ctrl+c退出node,并重新执行:
访问localhost:3000/userlist:
页面上什么都没有,因为我们没有数据,做个判断,并提示无数据:
红色部分为新添加的内容;注意括号的配对;
ctrl+c退出node,并重新执行:
刷新浏览器:
ok, 提示成功出现;
每一次都需要退出重启,你烦了没? 反正我是不耐烦了, 安装一个supervisor
以supervisor执行程序:
现在我们的程序已经可以热更新了,测试一下,修改一下提示文字:
保存直接刷新页面:
ok,成功了。
。。。。。。刚去开个小会, 一不小心到下班时间了,先下班。明天早上来接着写
![再见](http://static.blog.csdn.net/xheditor/xheditor_emot/default/bye.gif)
继续:
处理添加用户的请求:
先测试:
查看json文件:
可以看到已经添加上去了。 这边的添加事件所有属性都是随机取的。也没有对是否重名做判断和处理;
下面做一个删除用户的路由,需要用到用户名的配对:
先直接访问adduser刷新几次添加几条数值,访问userlist查看用户列表:
尝试一下删除第三条数据,访问deleteuser加上参数?91
提示删除成功,
刷新userlist可以看到第三条已经没有了。
再次访问deleteuser参数还是?91
返回末找到。
ok,到这里一个基本的读写已经完成了。附上全部代码:
const fs=require("fs"); //引入fs模块
const express=require("express"); //引入express模块
const app=express();
const url=require("url"); //实例化express
app.get('/',function(req,res){ //匹配主页的get请求
res.send("首页")
})
app.listen(3000) // 指定端口;
app.get("/userlist",function(req,res){ //匹配用户列表的get请求
fs.readFile('resource/user.json','utf-8',function(err,data){ //读取用户列表json文件
if(err){
res.send("文件读取失败"); //读取失败则返回失败提示
}else{
if(JSON.parse(data).length==0){ //若没有数据则提示无数据
res.end("暂无数据,请稍候查询!");
}else{
JSON.parse(data).forEach(function(v){ //循环读取到的内容
res.write("name:"+v.name+', age:'+v.age+', sex:'+v.sex+"\n"); //依次输出到页面上
})
}
res.send(); //结束请求
}
})
})
app.get("/adduser",function(req,res){ //匹配添加用户的请求(这里只演示不带参数的get请求)
fs.readFile('resource/user.json','utf-8',function(err,data){ //读取用记列表json文件
if(err){
res.send("文件读取失败"); //读取失败则返回失败提示
}else{
let userList=JSON.parse(data); //转json字符串为对象
userList.push({"name":parseInt(Math.random()*100),"age":"'"+parseInt(Math.random()*50)+"'","sex":Math.random()<0.5?"男":"女"}); //为对象添加一个新用户
let newList=JSON.stringify(userList); //将新的json对象转换为json字符串
fs.writeFileSync('resource/user.json',newList); //将新的json字符串写入到用户列表json文件中
res.send("添加成功") //提示添加成功并结束请求
}
})
})
app.get("/deleteuser",function(req,res){ //匹配添加用户的请求(这里只演示不带参数的get请求)
var urls=url.parse(req.url); //将url对象化,需引用url模块 var url=require('url')
fs.readFile('resource/user.json','utf-8',function(err,data){ //读取用记列表json文件
if(err){
res.send("文件读取失败"); //读取失败则返回失败提示
}else{
var datas=JSON.parse(data);
//注: 此处不建议用forEach,因为forEach无法直接跳出循环,需要多写一个变量来判断是否匹配到用户
for (var i=0;i<datas.length;i++){ //for 循环查找是否有匹配项
if(datas[i].name==urls.query){ //如果匹配到对应名称; query是?后面跟的参数
datas.splice(i,1); //从数组中删除该对象
fs.writeFileSync('resource/user.json',JSON.stringify(datas)); //将新的json字符串写入到用户列表json文件中
res.send("删除成功"); //提示删除成功
return false; //return false, 不执行后面的操作
}
}
res.send("未找到该用户"); //若没有匹配项,提示末找到该用户
}
})
})
// 通配符,不是以上任意请求的话,返回hello world!并结束请求;
app.get('*',function(req,res){
var urls=url.parse(req.url);
res.send("hello world!");
})
这只是一个小例子,还有很多东西需要完善,比如添加用户的时候判断是否重复;比如修改某条数据的某个值等等;
这些东西都是以读写的基本方法上衍生出来的。需要的话可以自行尝试
-------------end;