Node基础入门(四):案例
上一篇《Node基础入门(三):数据交互》
用以上所学知识开发一个登录/注册的程序。
一、需求分析
输入账户和密码,点击登录,查询数据库是否有该账户,有则继续检查密码是否正确,不正确则提示“密码错误”,正确则登录成功,跳转后台页面,无该账户则提示“账户不存在”;
输入账户和密码,点击注册,查询数据库是否有该账户,有则提示“账户已存在”,无则注册成功;
由于还未学习数据库,所以我们用一个user对象(JSON)代替用户表。
二、接口设计
名称:login / reg(注册和登录接口几乎相同)
请求方式:get / post(登录用get,注册用post)
参数:
username 账户(字符串)
password 密码 (字符串)
返回:
err 错误码(数字,0:正确,1:错误)
msg 返回信息(字符串)
三、代码开发
app.js
let http = require('http')
let url = require('url')
// 将post的数据从字符串类型转化为我们需要的json类型
let querystring = require('querystring')
// 为了成功访问http://localhost:8080/login.html
let fs = require('fs')
// 这里用一个json代替数据库,假设用户表已经有一个用户admin,密码是123
let user = {
admin: '123'
}
http.createServer((req, res) => {
// 获取数据
let path, get, post
if (req.method === 'GET') {
let {pathname, query} = url.parse(req.url, true)
path = pathname
get = query
complete()
} else if (req.method === 'POST') {
let result = []
path = req.url
req.on('data', buffer => {
result.push(buffer)
})
req.on('end', () => {
// 合并片段,然后转成字符串,最后处理成json
post = querystring.parse(Buffer.concat(result).toString())
complete()
})
}
function complete () {
if (path === '/login') {
// 解决中文乱码
res.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-8'
})
let {username, password} = get
if (!user[username]) {
res.end(JSON.stringify({
err: 1,
msg: '账户不存在'
}))
} else if (user[username] !== password) {
res.end(JSON.stringify({
err: 1,
msg: '密码错误'
}))
} else {
res.end(JSON.stringify({
err: 0,
msg: '登录成功'
}))
}
} 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 {
user[username] = password
res.end(JSON.stringify({
err: 0,
msg: '注册成功'
}))
}
} else {
// 说明是文件,则调用fs.readFile(),因此才能成功访问http://localhost:8080/login.html
fs.readFile(`.${req.url}`, (err, data) => {
if (err) {
res.end('404')
} else {
res.end(data)
}
})
}
}
}).listen(8080)
login.html
登录/注册
后台
账户:
密码:
admin.html
密码:
发表评论 (审核通过后显示评论):