有同学知道怎么回事吗?链接错了吗 一直改了很多遍 还是显示这样,咋办?
普通页面没有报错 访问localhost:8080/login.html就报错
//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>