基于node.js的留言板案例总结

655 阅读3分钟

基于node.js的留言板案例总结

完成模块:

1.注册与登陆
2.更改头像
3.用户留言功能与用户评论功能
4.退出登录

1.注册与登陆

1.1注册

只有注册了的用户才可以登录本系统和完成各项功能。
注册流程:

graph TD
输入用户名--> 输入密码-->再次输入密码-->点击注册-->向服务器发送数据验证-->服务器返回注册成功or注册失败

验证流程:
1.点击注册后,前台检测两次密码是否一致。一致进入下一步,不一致提示两次密码输入不一致,重新输入。代码如下:

        var userName=document.getElementById('userName').value;//获取用户名
        var userPsw=document.getElementById('userPsw').value;//获取密码
        var againPsw=document.getElementById('againPsw').value;//获取第二次密码
        if(userPsw!=againPsw){//如果两次密码不一致
            alert('两次密码不一致')
            return
        }

2.两次密码一致则将用户提交的用户名和密码提交至服务器进行验证。服务器验证如果该账号尚未被注册,则将用户信息以及默认头像保存至服务器,并返回前台注册成功,跳转至登录界面。如果该账号已被注册,则返回前台该账号已被注册。(请求方法:POST,接口:regist)代码如下:

web.post('/regist', function (req, res) {
    for (var index = 0; index < userList.length; index++) {
        if (userList[index].userName == req.body.userName) {
            res.send('用户名已注册');
            return
        }
    }
    req.body.headerIMG = './headerIMG/auto.jpg'
    var userRegist = {
        userName: req.body.userName,
        userPsw: req.body.userPsw,
        headerIMG: req.body.headerIMG
    }
    userList.push(userRegist)
    fs.writeFile('allUser.txt', JSON.stringify(userList), function (err) {
        res.send('注册成功')
    });
})

效果图:

注册.png

1.2登录

已注册用户通过登陆本系统使用功能
登录流程:

graph TD
输入用户名 -->输入密码-->点击登录-->向服务器发送数据验证-->服务器返回登陆成功or登陆失败

验证流程:服务器接收前台发来的用户名和密码数据,服务器通过对比数据库中的用户名信息,如果不存在该用户名,则发送用户名尚未被注册的信息。如果存在该用户名,则验证数据库中该用户的密码和前台发送的密码是否一致,一致则返回登陆成功,并向浏览器添加一个name为‘userName’,value为当前登录的用户名的cookie。不一致则返回密码错误。代码如下(请求方法:post,接口:):

web.post('/login', function (req, res) {
    for (var index = 0; index < userList.length; index++) {
        if (userList[index].userName == req.body.userName) {
            if (userList[index].userPsw == req.body.userPsw) {
                res.cookie('userName', req.body.userName)
                res.send('登陆成功')
            } else {
                res.send('密码错误')
            }
            return
        }
    } res.send('该用户不存在')
})

效果图:

登录.png

2.留言板主界面

思路:
1:主界面需要预先加载判断用户是否登陆,未登录禁止使用各项功能。
2:主界面预加载已发布的留言与评论
3:主界面需实现更换头像、发布留言、回复留言三个功能。
主界面展示:

主界面.png 主要服务器代码展示:

//查询所有信息
web.get('/allMessage', function (req, res) {
    fs.readFile('allMessage.txt', 'utf-8', function (err, data) {
        allMessage = JSON.parse(data);
        res.send(allMessage)
    })
})

添加留言展示:

添加留言.png 主要服务器代码展示:

//添加留言
web.post('/addMessage', function (req, res) {
    var date = new Date();
    date = date.toLocaleString()
    var headerUrl;
    for (var index = 0; index < userList.length; index++) {
        if (userList[index].userName == req.body.userName) {
            headerUrl = userList[index].headerIMG;
            break
        }
    }
    var addMessage = {
        userName: req.body.userName,
        message: req.body.message,
        date: date,
        hearderUrl: headerUrl,
        returnMessage:[]

    }
    allMessage.unshift(addMessage);
    fs.writeFile('allMessage.txt', JSON.stringify(allMessage), function (err) {
        res.send('提交成功')
    })
})

回复留言展示:

回复留言.png 主要服务器代码展示:

//回复留言
web.post('/returnMessage',function(req,res){
    var returnMessage=allMessage[req.body.index].returnMessage;
    var header=userList.filter(function(el){
        return el.userName==req.body.userName
    })
    var date=new Date();
    date=date.toLocaleString();
    var returnMessageArrey={
        name:req.body.userName,
        message:req.body.message,
        date:date,
        header:header[0].headerIMG
    }
    returnMessage.unshift(returnMessageArrey);
    fs.writeFile('allMessage.txt',JSON.stringify(allMessage),function(err){
        res.send('回复成功')
    })

})

总结

功能基本实现,但是整体界面排版太乱,不规整。

感悟

1.多使用Bootstrap框架进行页面布局,尽量避免自己写页面布局(丑、乱、差)。
2.代码尽量写上注释,避免代码写多后找不到前面写的在哪或者不知道前面写的啥(总自以为是自己记得住,看得懂)。