最近在学习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的更多相关文章

  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 这个报错是在将数组对象通过 ...

  2. 报错Unexpected token u

    报错Unexpected token u,出错位置提示在index.html的第一行. 出现这个错误的原因是尝试JOSN.parse一个undefined的对象导致的,解决办法就是如果为undefin ...

  3. webpack打包报错Unexpected token

    最近项目要上线,需要对项目进行打包部署到服务器上面,在打包过程中npm run build后出现以下报错Unexpected token: punc (() [./~/_element-ui@1.4. ...

  4. electron-vue 引入OpenLayer 报错 Unexpected token export

    electron-vue 引入OpenLayer 报错 Unexpected token export 解决办法: 在 .electron-vue/webpack.renderer.config.js ...

  5. Vue打包报错Unexpected token: punc(()解决方案

    (用vscode)vue项目打包时,报错,报错信息如下: ERROR in static/js/0.564c764efc3ecf31190c.js from UglifyJs Unexpected t ...

  6. 前端node.js npm i 报错Unexpected end of JSON input while parsing near

    清缓存 npm cache clean --force 重新安装 npm install

  7. npm install 报错Unexpected end of JSON input while parsing near...

    安装node http://nodejs.cn/download/ 克隆代码 ....... 执行安装 npm install 然后就报了一坨错误 清理一下缓存 sudo npm cache veri ...

  8. js解析json报错Unexpected token i in JSON at position 1

    因为后台json是手动拼接的,在拼接时偷了懒,不想转义,所以就用了单引号,结果js解析时悲催了 这里记录一下,被解析的json字符串必须键值对都用双引号包起来,必须是双引号 默默罚抄一百遍

  9. react创建项目报错unexpected end of json while parsing near xxx

    报这个错,执行下面的命令,然后重新创建项目就可以. npm cache clean --force

随机推荐

  1. 利用包管理器安装Node.JS

    步骤1:用curl获取源代码在我们用卷曲获取源代码之前,我们必须先升级操作系统,然后用卷发命令获取NodeSource添加到本地仓库. root@ubuntu-15:~#apt-get update安 ...

  2. xilinx planahead partial reconfiguration

    1.为什么要使用reconfiguration? reconfiguration,即逻辑可重配,指的是FPGA的逻辑只加载指定区域(功能)的逻辑,而对除此之外的逻辑不产生影响,最常用的就是PCIe/P ...

  3. SPI编程

    #include <stdio.h>#include <wiringPi.h>#include <wiringPiSPI.h> int main(void){ un ...

  4. C#的常量和变量以及其作用域和命名规范

    1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量. 通俗来说,就是定义一个不能改变值的量.既然不能变动值,那就必须在定义的时候初始化. 语法: const 类型名 常量名=常量表达式 ...

  5. 结合jenkins以及PTP平台的性能回归测试

    此文已由作者余笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1背景简介 1.1 jenkins Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle ...

  6. EOS概念理解总结

    本文参考EOS版本:v1.1.1 一.EOS投票相关 //用户投票1.不能自己代理自己,但可以自己给自己投票; 2.投票的生产节点名称不能重复;3.投票人设置了投票代理人后自己不能再投票;4.投票人需 ...

  7. Java通过IO流输入输出 向文件中存入大量三个属性的值,并通过验证前两个属性输出第三个属性

    package ABC1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import ...

  8. Linux命令发送Http的get或post请求(curl和wget两种方法)

    Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求.下面就来介绍一下Linux系统如何模拟Http ...

  9. PartTime_网址_国外

    https://www.douban.com/group/topic/6248314/ 国外威客网站大全 国外兼职网站,以及国外外包网站.这些国外项目网站包括的项目类型很多:logo设计.图形设计.f ...

  10. LeetCode 046 Permutations 全排列

    Given a collection of distinct numbers, return all possible permutations.For example,[1,2,3] have th ...