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>
注:在这里对于提交一些没有做一些严格的验证,只是做一个简单的逻辑处理,大家可以根据自己的情况去完善,一起交流!
node模拟后台返回json书写格式报错--Unexpected token ' in JSON at position 1的更多相关文章
- 记录微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function
微信小程序报错 Unexpected end of JSON input;at pages/flow/checkout page getOrderData function 这个报错是在将数组对象通过 ...
- 报错Unexpected token u
报错Unexpected token u,出错位置提示在index.html的第一行. 出现这个错误的原因是尝试JOSN.parse一个undefined的对象导致的,解决办法就是如果为undefin ...
- webpack打包报错Unexpected token
最近项目要上线,需要对项目进行打包部署到服务器上面,在打包过程中npm run build后出现以下报错Unexpected token: punc (() [./~/_element-ui@1.4. ...
- electron-vue 引入OpenLayer 报错 Unexpected token export
electron-vue 引入OpenLayer 报错 Unexpected token export 解决办法: 在 .electron-vue/webpack.renderer.config.js ...
- Vue打包报错Unexpected token: punc(()解决方案
(用vscode)vue项目打包时,报错,报错信息如下: ERROR in static/js/0.564c764efc3ecf31190c.js from UglifyJs Unexpected t ...
- 前端node.js npm i 报错Unexpected end of JSON input while parsing near
清缓存 npm cache clean --force 重新安装 npm install
- npm install 报错Unexpected end of JSON input while parsing near...
安装node http://nodejs.cn/download/ 克隆代码 ....... 执行安装 npm install 然后就报了一坨错误 清理一下缓存 sudo npm cache veri ...
- js解析json报错Unexpected token i in JSON at position 1
因为后台json是手动拼接的,在拼接时偷了懒,不想转义,所以就用了单引号,结果js解析时悲催了 这里记录一下,被解析的json字符串必须键值对都用双引号包起来,必须是双引号 默默罚抄一百遍
- react创建项目报错unexpected end of json while parsing near xxx
报这个错,执行下面的命令,然后重新创建项目就可以. npm cache clean --force
随机推荐
- 第四篇 express 安装esasticsearch
1.首先,我们创建一个Express应用程序!我将使用express.js生成器. npm install -g express-generator express ./autocompleter c ...
- ASE分析
1.Prepare necessary input files(可以参考上次的博客http://www.cnblogs.com/renping/p/7391028.html) 1)对fq1和fq2合并 ...
- ARC097C K-th Substring
传送门 题目 You are given a string s. Among the different substrings of s, print the K-th lexicographical ...
- datatables的使用
在开发web项目中,界面就是一个以丰富友好的样式来展现数据的窗口,同样的数据不用的展现形式给人不同的体验,数据列表是数据是一种常见展现形式,对于数据列表的一个最基本的要求就是能够实现分页以及检索功能. ...
- 理解setTimeout和setInterval
setTimeout和setInterval,这两个js函数都是用来定时执行.setTimeout执行一次,setInterval执行多次. 问题出现在今天,使用setInterval是,设置执行速度 ...
- linux下sed批量替换文件内容
在linux超级终端下编辑文档是件比较麻烦的事情,下面简单介绍一下如何在linux下批量替换文件内容 linuxsed 批量替换多个文件中的字符串 格式: sed -i "s/查找字段/替换 ...
- 【Qt官方例程学习笔记】Address Book Example(代理模型)
地址簿示例展示了如何使用代理模型在单个模型的数据上显示不同的视图. 本例提供了一个地址簿,允许按字母顺序将联系人分组为9组:ABC.DEF.GHI.…,VW,…XYZ.这是通过在同一个模型上使用多个视 ...
- jexus处理静态文件(处理后缀)
AspNet_Exts=txt就能把你指定的扩展名交给asp.net处理.同理,可以写很多个,AspNet_Exts=txt,htm,html
- 序列化 (C#)
序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存.数据库或文件的过程. 它的主要用途是保存对象的状态,以便能够在需要时重新创建对象. 反向过程称为"反序列化". 序列化 ...
- C++基础之继承类和派生类
(1)继承是创建一个具有某个类的属性和行为的新类的能力.原有的类称为基类,新创建的类称为派生类.派生类将基类中的所有成员作为自己的成员,同时派生类本身可以定义新的成员(2)派生类只有一个基类的继承称单 ...