node模拟后台返回json书写格式报错--Unexpected token ' in JSON at position 1

最近在学习Node的知识,就尝试写了一个注册登陆的简单功能,但是自己在模拟后台返回值的时候,总是报错Unexpected token ' in JSON at position 1,查找原因之后,是因为我的返回data是这样定义的,res.write("{'ok':false,'msg':'用户名或者密码错误!'}"),所以会报错,正确写法是res.write('{"ok":false,"msg":"用户名或者密码错误!"}'),里面必须用双引号括住,。

代码如下:

服务器端代码:

var http = require('http');
var fs = require('fs');
var urlLib = require('url');
var querystring = require('querystring');
var users = {};
var server = http.createServer((req,res) => {
var str = '';
req.on('data',(data) => {
str += data
});
req.on('end',() => {
var obj = urlLib.parse(req.url,true);
var url = obj.pathname;
var GET = obj.query;
var POST = querystring.parse(str);
if(url == '/user') {
switch (GET.act) {
case 'login':
if(users[GET.user] == null) {
res.write('{"ok":false,"msg":"该用户不存在!"}')
}else if(GET.pass != users[GET.user]) {
res.write('{"ok":false,"msg":"用户名或者密码错误!"}')
}else {
res.write('{"ok":true,"msg":"登录成功!"}')
}
break;
case 'reg':
if(users[GET.user]) {
res.write('{"ok":false,"msg":"该用户已存在!"}')
}else {
users[GET.user] = GET.pass
res.write('{"ok":true,"msg":"注册成功!"}')
}
break;
default:
res.write('{"ok":false,"msg":"未知的act!"}')
};
res.end()
}else {
var file_url = './' + url;
fs.readFile(file_url,(err,data) => {
if(err) {
res.write('404')
}else {
res.write(data)
};
res.end()
})
}
})
}).listen(8080,() => {
console.log('启动了!')
})

客户端代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<script>
$(document).ready(function() {
var oUser = $('#user');
var oPass = $('#pass');
var oRegBtn = $('#regBtn');
var oLoginBtn = $('#LoginBtn');
//登陆
oLoginBtn.on('click',() => {
$.ajax({
url: '/user',
data: {act:'login',user:oUser.val(),pass:oPass.val()},
type: 'get',
success: function(data) {
var ok = JSON.parse(data).ok;
if(ok) {
alert('登录成功!')
}else {
alert('登录失败 '+ JSON.parse(data).msg)
}
},
error: function() {
alert('通信失败!')
}
})
})
//注册
oRegBtn.on('click',() => {
$.ajax({
url: '/user',
data: {act:'reg',user:oUser.val(),pass:oPass.val()},
type: 'get',
success: function(data) {
var ok = JSON.parse(data).ok;
if(ok) {
alert('注册成功!')
}else {
alert('注册失败 '+ JSON.parse(data).msg)
}
},
error: function() {
alert('通信失败!')
}
})
})
})
</script>
<body>
用户名:<input type="text" id="user" value=""><br />
密码:<input type="password" id="pass" value=""><br />
<input type="button" id="regBtn" value="注册">
<input type="button" id="LoginBtn" value="登录">
</body>
</html>

注:在这里对于提交一些没有做一些严格的验证,只是做一个简单的逻辑处理,大家可以根据自己的情况去完善,一起交流!

猜你喜欢

转载自www.cnblogs.com/shenwh/p/10011586.html