1. 程式人生 > >node模擬後臺返回json書寫格式報錯--Unexpected token ' in JSON at position 1

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>

 

注:在這裡對於提交一些沒有做一些嚴格的驗證,只是做一個簡單的邏輯處理,大家可以根據自己的情況去完善,一起交流!