今天除了登录,还想做注册,也不用form表单了,用jquery的ajax方法
1.数据格式
首先还是需要一个json文件,不需要很多数据
{"user":[{"name":"斯忒诺","password":"1"}]}
2.主界面body部分
<body>
用户:<input type="text" id="name" value=""><br>
密码:<input type="text" id="password" value=""><br>
<button id="register" onclick="re_click()">注册</button>
<button id="log" onclick="log_click()">登录</button>
</body>
3.数据传递
首先需要从前端传递用户输入的数据,使用jquery的ajax方法,使用了get的传递方式
$.ajax(
{
url:"/user",
type: 'get',
data:{act:"reg",name:na,password:pa},
success:function(data)
{
data=JSON.parse(data)
//因为传递的数据是字符串格式的需要改为object
if(data.ok=="true")
{
alert("注册成功")
}
else
{
alert("注册失败:"+data.msg)
}
},
error:function()
{
alert("通信失败")
}
})
那么从后端传递数据,需要使用response.write(),把数据传递到前端,并使用success的回调函数,将数据转换为JSON格式并进行判断处理,传递的数据有两个值,OK以及msg记录是否成功以及原因,比如
res.write('{"ok":"false","msg":"此用户已存在"}')
4.json文件读取与增加
fs.readFile("username.json",function(err,data){
if(err)
{
req.write("404")
}
else {
var params={"name":get.name,"password":get.password}
//增添的项目由注册时用户填写的内容决定,以json中的格式记录下来
var person = data.toString();
person = JSON.parse(person)
//将json中已经有的数据取出来,因为是以二进制传输的,所以首先需要转换为字符串,然后转换为JSON
person.user.push(params)
//将传来的对象push进对象中
console.log("person.user",person.user)
var str = JSON.stringify(person)
//因为nodejs的写入文件只认识字符串或者二进制数,所以把json对象转换成字符串重新写入json文件中
fs.writeFile("username.json",str,function(err)
{
if(err)
console.log(error)
else {
res.write('{"ok":"true","msg":"注册成功"}')
}
res.end()
})
}
})
5.其余部分
没什么重要的部分了,只有req.end()和fs.readFile()的异步很容易出错,所以在每一个步骤中都单独加入req.end(),虽然会变多,但是不会出错。
res.write()除了在页面中增加内容,也有传递数据的作用