使用art-template插件显示页面,实现发表留言功能

 第一步:引入模块

//引入核心模块
const fs = require('fs');
const path = require('path');
//第三方模块
const express = require('express');
const bodyParser = require('body-parser');
const template = require('art-template');

const app = express();

设置监听

app.listen(3000, () => {
    console.log('开始监听3000');
});
设置静态资源

app.use('/statics', express.static(path.join(__dirname, 'public')));

//配置body-parser,解析解析体中的内容
//配置好之后,可以在回调函数中使用req.body得到数据

app.use(bodyParser.urlencoded({ extended: false }));
// 当发送的post请求,并且 content-type 的值是application/x-www-form-urlencoded
// 处理请求体的格式 name=zs&content=123
// 转换成对象,并且添加到req.body

 处理首页的请求

//处理留言列表
app.get('/', (req, res) => {
    let dbPath = path.join(__dirname, 'db.json');
    fs.readFile(dbPath, 'utf-8', (err, data) => {
        if (err) throw err;
        let msgs = JSON.parse(data);
        let html = template(path.join(__dirname, 'views/index.html'), {
            msgs
        });
        res.send(html);
    });
});
//发表留言
app.post('/public', (req, res) => {
    let dbPath = path.join(__dirname, 'db.json');
    fs.readFile(dbPath, 'utf-8', (err, data) => {
        if (err) throw err;
        let msgs = JSON.parse(data);
        let lastMsg = msgs[msgs.length - 1];
        let msg = {
            id: lastMsg.id + 1,
            name: req.body.name,
            content: req.body.content,
            time: '2018-10-19',
            img: lastMsg.img
        };
        msgs.push(msg);
        //转换为json格式,存入json
        let str = JSON.stringify(msgs);
        fs.writeFile(dbPath, str, (err) => {
            if (err) throw err;
            res.send('<script>alert("发表成功");location.href:"/"</script>')
        });
    });
});

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>
  <link rel="stylesheet" href="statics/css/index.css">
</head>
<body>
    <div class="content">
        <div class="wrap">
            <form action="/publish" method="POST">
                <div class="box">
                    <textarea name="content" value="说说今天有趣的事"></textarea> 
                </div>
                <div class="publish">
                    您的大名:<input type="text" name="name">
                    <!-- <a href="javascript:void(0);" class="W_btn">发布</a> -->
                    <button class="W_btn">发布</button>
                </div>
            </form>
        </div>
        <div class="list">
            <ul>
                {{ each msgs }}
                <li>
                    <img src="{{ $value.img }}"  alt="" class="pic">
                    <div class="list_con">
                        <div class="time">
                            <strong>发表时间:  <i>{{ $value.time }}</i></strong>
                            <img src="statics/images/lj.jpg" alt="">
                        </div>
                        <p><b>{{ $value.name }}:</b>  {{ $value.content }}</p>
                    </div>
                </li>
                {{ /each }}
            </ul>
        </div>
    </div>
</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值