• 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>

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

  • 相关阅读:
    关于JVM的一些想法
    hashMap理解以及jdk1.7、jdk1.8其中区别
    各数据库如何实现自增
    dubbo遇坑记录
    mysql建表语句问题
    @Configuration
    生成一个唯一的ID
    门面模式
    关于getClass().getClassLoader()
    元素链
  • 原文地址:https://www.cnblogs.com/shenwh/p/10011586.html
Copyright © 2020-2023  润新知