Node.js留言板

先把页面做出来,样式使用bootstrap,制作首页、提交评论页面、404页面。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/public/css/bootstrap-4.5.3-dist/css/bootstrap.css">
</head>
<body>
<div class="header container">
    <div class="page-header">
        <h1>Example page header<small>Subtext for header</small></h1>
        <a class="btn btn-success" href="/post">发表留言</a>
    </div>
    <div class="comments container">
        <ul class="list-group">
            {{each comments}}
            <li class="list-group-item">{{$value.name}}说:{{$value.message}}<span class="pull-right">{{$value.dateTime}}</span></li>
            {{/each}}
        </ul>
    </div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/public/css/bootstrap-4.5.3-dist/css/bootstrap.css">
</head>
<body>
    <div class="header container">
        <div class="page-header">
            <h1><a href="/">首页</a><small>Subtext for header</small></h1>
        </div>
    </div>
    <div class="comments container">

        <form action="/pinglun" method="get">
            <div class="form-group">
                <label for="input_name">你的大名</label>
                <input type="text" class="form-control" name="name" required minlength="2" maxlength="10" id="input_name" placeholder="请写入你的姓名">
            </div>
            <div class="form-group">
                <label for="textarea_message">留言内容</label>
                <textarea class="form-control" name="message" required minlength="5" maxlength="20" id="textarea_message" cols="30" rows="10"></textarea>
            </div>
            <button type="submit" class="btn btn-default">发表</button>
        </form>
    </div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>您访问的页面已经失联啦。。。。。</h2>
</body>
</html>

使用Node.js的http、fs、url核心模块,使用art-template模板引擎,在此不用框架,使用底层方法。学习之后,可以试着使用express,感受框架的便捷哈哈。

var http = require('http')
var fs = require('fs')
var template = require('art-template')
var url = require('url')
var comments = [
    {
        name:'hcc',
        message:'啦啦啦',
        dataTime:'2020-12-04'
    },
    {
        name:'hcc',
        message:'啦啦啦',
        dataTime:'2020-12-04'
    },
    {
        name:'hcc',
        message:'啦啦啦',
        dataTime:'2020-12-04'
    },
    {
        name:'hcc',
        message:'啦啦啦',
        dataTime:'2020-12-04'
    }
]
http
    .createServer(function (req,res) {
        var parseObj = url.parse(req.url,true)
        console.log(parseObj)
        var pathname = parseObj.pathname
        if(pathname === '/'){
            fs.readFile('./views/index.html',function (err,data) {
                if(err){
                    return res.end('404 not found')
                }else{
                    var htmlStr = template.render(data.toString(),{comments:comments})
                    res.end(htmlStr)
                }
            })
        }else if(pathname === '/post'){
            fs.readFile('./views/post.html',function (err,data) {
                res.end(data)
            })
        }else if(pathname.indexOf('/public/') === 0){
            // /public/css/main.css
            // /public/js/main.js
            // /public/lib/jquery.js
            /*统一处理:
            *   如果请求路径是以/public/开头的,则我认为你要获取public中的某一资源
            *   所以我们就直接可以把请求路径当做文件路径来直接进行读取*/
            fs.readFile('.'+pathname,function (err,data) {
                if(err){
                    return res.end('404 not found')
                }
                res.end(data)
            })
        }else if(pathname === '/pinglun'){
            //res.end(JSON.stringify(parseObj.query))
            var comment = parseObj.query
            comment.dateTime = '2020-12-05 09:53:34'
            comments.push(comment)

            /*如何通过服务器让客户端重定向?
            *   1.状态码设置为302临时重定向
            *   2.在响应头中通过Location告诉客户端往哪儿重定向
            *   如果客户端发现收到服务器的响应的状态码是302就会自动去响应头中找location
            *   所以就能看到客户端自动跳转了*/
            res.statusCode = 302
            res.setHeader('Location','/')
            res.end()
        }else{
            fs.readFile('./views/404.html',function (err,data) {
              res.end(data)
            })
        }
    })
    .listen(3000,function () {
        console.log('running...')
    })
Node.js留言板的功能实现可以通过以下步骤来完成: 1. 搭建服务:使用Node.js的http模块创建一个服务器,监听指定的端口。 2. 实现发表和主页面之间的跳转:当用户点击"发表留言"时,服务器将重定向到write.html页面。在write.html页面中,用户可以输入留言信息,并点击"留言"按钮。 3. 读取数据源:在服务器端,通过fs模块读取存储留言的数据源文件,获取已有的留言信息。 4. 渲染页面:使用模板引擎(如template.render)将读取到的留言信息渲染到主页面(index.html)中。 5. 返回响应:将渲染完的页面作为响应返回给浏览器,用户就可以看到最新的留言信息。 需要注意的是,还可以实现404页面,当用户访问不存在的页面时,返回一个自定义的404页面给用户。 以上是实现Node.js留言板功能的基本思路,你可以根据引用\[1\]和引用\[2\]中提供的代码实现来具体编写你的留言板应用。 #### 引用[.reference_title] - *1* [Nodejs留言板功能实现](https://blog.csdn.net/zy0815hhh/article/details/122713431)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Node.js利用get类型的接口实现简单留言板](https://blog.csdn.net/m0_53456432/article/details/124667394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于Node.js实现简易留言板](https://blog.csdn.net/qq_40896145/article/details/117956766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值