为了账号安全,请及时绑定邮箱和手机立即绑定

有同学知道怎么回事吗?链接错了吗 一直改了很多遍 还是显示这样,咋办?

普通页面没有报错 访问localhost:8080/login.html就报错

http://img1.sycdn.imooc.com//5e15e2290001fc0609770124.jpghttp://img1.sycdn.imooc.com//5e15e2ac00015ef919180197.jpg

//app.js文件


const http = require('http') //引进http就是创建服务器

const url = require('url')

const querysring = require('querystring')

const fs = require('fs')


let user = {

    //用json代替/假装数据库,存的用户的(登录)数据

    admin: 123456

}

http.createServer((req, res) => {

    //获取数据


    let path, get, post

    if (req.method == 'GET') {

        let { pathname, query } = url.parse(req.url, true)

        path = pathname,

            get = query //吧数据放到外面去,get数据


        complete()


    } else if (req.method == 'POST') {


        let arr = []

        req.on('data', buffer => {

            arr.push(buffer) //暂时拿到了buffer

        })


        req.on('end', () => {

            post = querystring.parse(Buffer.concat(arr).toString())

                //concat()方法吧数组平起来,二进制转为toString变成人能看的东西,如果是文件不能用toString

                //querystring也是一个parse,处理成我们喜欢的string

        })

        complete()

    }



    function complete() {

        //响应头,状态码200成功,写在这里不太好,到时候ajax去写是不会乱码的,写在最外层是因为登录和注册msg都有中文写一次可以共同去用

        // res.writeHead(200, {


        //         "Content-Type": "text/plain;charset=utf-8"

        //     }) //将乱码转换为编码(msg乱码了)








        if (path == '/login') {


            if (!user[username]) {


                res.writeHead(200, {


                    "Content-Type": "text/plain;charset=utf-8"

                })





                //登录

                let { username, password } = get

                //拿到的get数据,判断数据库有没有,username,password是确定的名字 


                //判断如果是用户的密码登录成功


                res.end(JSON.stringify({

                        err: 1,

                        msg: "用户名不存在",


                    }), //end 只能用字符串和buffer,用JSON.stringify转换为字符串   //end是一个回调


                )





            } else if (user[username] != password) {

                res.end(JSON.stringify({

                    err: 1,

                    msg: "密码错误"

                }))


            } else {

                res.end(JSON.stringify({

                        err: 0,

                        msg: "登录成功"

                    })) //成功 err为0

            }




        } else if (path == '/reg') {


            res.writeHead(200, {


                "Content-Type": "text/plain;charset=utf-8"

            })




            //注册

            let { username, password } = post


            if (user[username]) {

                //先从错误的判断,已经注册的话告诉用户不好意思


                res.end(JSON.stringify({

                    err: 1,

                    msg: "账号已经存在"

                }))


            } else {

                res.end(JSON.stringify({

                    err: 0,

                    msg: "注册成功"

                }))

            }










        } else {

            //fs读取的


            fs.readFile(`www${path}`, (err, data) => {

                if (err) {

                    res.end('404')

                } else {

                    res.end(data) //这个data就是buffer直接end就可以

                }

            })





        }


    }







}).listen(8080)




//let path,get,post 路径 get数据 post数据


// get有个url的路径 


//let{pathname,query}=url.parse(req.url,true) parse(是解析一下,好像是数组解析)true(是split)


//post 比较复杂 是异步


//在if块最后,在else if块最后,不可能做两个事情,创建一个完成的函数,在if,else if块最后执行


//get请求写完 测试(没有用到之前的form.html文件) 命令行输入这个node app  在浏览器输入localhost:8080/login?username=zhangsan&password=123456 

//显示{"err":1,"msg":"鐢ㄦ埛鍚嶄笉瀛樺湪"},这个字符串没报错,是乱码,因为msg:中文,(到时候ajax去写是不会乱码的)

//将乱码转换为编码,重新执行,显示{"err":1,"msg":"用户名不存在"}



//post写完没办法跟get请求一样测试,要用ajax,在node文件夹下建一个www的文件夹,www文件夹里面有login.html,这个静态文件访问不了(localhost:8080/login.html,因为现在还没有写过),

//用fs模块读取这个文件,访问(localhost:8080/login.html),显示字符串,被编码影响了,吧编码重新放在登录,注册if块和else if块最前面 (命令行和网址输入,显示登录框)



//login.html 登录页面引入jquery.min.js,开始写ajax(在html页面写)






//login.html文件

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>





    <script src="jquery.min.js"></script>

</head>


<body>

    用户名:<input type="text" id="username"><br/> 密码:

    <input type="password" id='password'><br/>

    <button id="login">登录</button><br/>

    <button id="reg">注册</button><br/>

    <script>

        $('#login').click(function() {

            $.ajax({

                url: "/login",

                data: {

                    username: $('#username').val(),

                    password: $('#passwor').val()

                },

                dataType: "json",

                success(res) {

                    //执行成功返回的是json值

                    if (res.err) {

                        alert(res.mag)

                    } else {

                        alert("登录成功")

                    }




                }

            })

        })

    </script>


</body>




</html>




正在回答

3 回答

同学,先回答你第一个错误:

//登录的问题:  let { username, password } = get

这段代码你写在了if判断的下面,当执行if的时候,还没获取到username,当然就报错了。 你把这段代码放到if前面即可解决。


第二个问题:

关于你的jquery找不到的问题,是因为你路径写的有问题.

login.html和jquery.min.js是同一个目录,

所以你引入jquery的时候,src应该是./jquery.min.js, 不用加前面的/www/,

./是指当前目录的意思

希望能解决你的问题。:)


0 回复 有任何疑惑可以回复我~
#1

鹿人神经粉 提问者

老师 你这么好的呀 居然给我回复了 我有空再接着学
2020-01-30 回复 有任何疑惑可以回复我~

代码太多不想看

0 回复 有任何疑惑可以回复我~

我想补充,当我改完路径又有问题,课程是没有www.+jquery的路径的然后文件也是复制到www文件夹  然后我这里显示这样http://img1.sycdn.imooc.com//5e15eb460001e69f09941006.jpghttp://img1.sycdn.imooc.com//5e15eb5d00014aae07550439.jpghttp://img1.sycdn.imooc.com//5e15eb7300012dcc19200165.jpghttp://img1.sycdn.imooc.com//5e15eb860001ad2411000220.jpg

0 回复 有任何疑惑可以回复我~
#1

慕沐3296643

应该路径错了,login.html和jquery.min.js是同级目录,不需要写www/xxx了,直接写src="jquery.min.js" 或者 src="./jquery.min.js"
2020-04-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有同学知道怎么回事吗?链接错了吗 一直改了很多遍 还是显示这样,咋办?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信