zoukankan      html  css  js  c++  java
  • 基于express框架的留言板实现步骤

       这个留言板是基于express框架,和ejs模板引擎,首先需要在根目录安装express框架,然后安装ejs模块和body-parser(获取用户表单提交的数据);建立项目目录 message,然后依次建立views文件夹  (存放ejs模板文件)、public(存放静态资源css js images,使用express内置中间件static托管静态)、routers(路由文件,创建路由级中间件);

    然后建立一个入口文件app.js .

    // 项目入口文件
    'use strict';
    const express = require('express');
    const path = require('path');
    const app = express();
    const bodyParser = require('body-parser');
    //引入获取表单的第三方中间件
    //托管静态资源
    app.use(express.static(path.join(__dirname, 'public'))); //将public的资源全部托管
    
    // 使用bodyparser中间件
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    //实现跟路由;可以通过message二级路由来实现
    const message = require('./routers/message');
    app.use('/', message);
    //之后的显示全部在二级路由message中处理
    app.listen(3000, () => {
        console.log('3000 is on!');
    });
    

      再在routers文件夹中建立一个message路由如下

    const express = require('express');
    const router = express.Router();
    const path = require('path');
    const fs = require('fs');
    const app = express();
    // 实现载入页面的路由;需要载入的页面中含有静态资源和用户的留言
    
    router.get('/', (req, res) => {
        // 显示用户的留言
        //读取数据
        let arr = [];
        // 渲染ejs页面
        if (fs.existsSync('msg.json')) { //判断是否存在这个文件 ,如果存在就直接读取,如果不存在就写入
            let str = fs.readFileSync('msg.json', 'utf8');
            arr = JSON.parse(str);
        }
        res.render('index.ejs', { data: arr }, (err, html) => {
            if (err) throw err;
            console.log(html);
            res.send(html);
        });
    });
    // 处理用户的提交留言
    router.post('/publish', (req, res) => {
        let msg = req.body; //提取用户提交的数据
        msg.time = new Date().toLocaleString();
        let arr = [];
        // 保存用户的留言
        if (fs.existsSync('msg.json')) {
            // 如果msg.json存在文件就先读取文件再写入
            let str = fs.readFileSync('msg.json', 'utf8');
            arr = JSON.parse(str);
        }
        arr.push(msg);
        // 将数据写入msg.json中
        fs.writeFile('msg.json', JSON.stringify(arr), (err) => {
            if (err) throw err;
            res.send('<p>发布成功<a href="/">返回</a></p>');
        });
    });
    module.exports = router;

    在views文件夹中放ejs模板文件index.ejs,代码如下;

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <link rel="stylesheet" href="style/base.css" type="text/css" />
        <link rel="stylesheet" href="style/global.css" type="text/css" />
        <title>LD Studio 留言板---很靠谱的留言板</title>
    </head>
    
    <body>
        <div class="wrapper">
            <!--  公共头部 -->
            <div class="header">
                <h1><a href="">LD Stuido留言板</a></h1>
                <h2>很靠谱的留言板</h2>
                <img src="images/hanoi.jpg" alt="" />
                <ul>
                    <li><a href="/">首页</a></li>
                    <li><a href="/">关于</a></li>
                </ul>
            </div>
    
    
            <div class="main">
                <div class="content">
                    <% for (var i = 0; i < data.length; i++) { %>
                        <div class="msg">
                            <h2>
                                <%= data[i].title %>
                            </h2>
                            <p>发表于
                                <a href="">
                                    <%= data[i].time %>
                                </a> 由
                                <a href="">
                                    <%= data[i].author %>
                                </a>
                            </p>
                            <p>
                                <%= data[i].content %>
                            </p>
                        </div>
                        <% } %>
    
    
                            <div class="msg_form">
                                <h2>发表留言</h2>
                                <form action="/publish" method="post">
                                    <ul>
                                        <li>
                                            <label for="">标题:</label>
                                        </li>
                                        <li>
                                            <input type="text" name="title" class="txt" />
                                        </li>
                                        <li>
                                            <label for="">作者:</label>
                                        </li>
                                        <li>
                                            <input type="text" name="author" class="txt" />
                                        </li>
                                        <li>
                                            <label for="">内容:</label>
                                        </li>
                                        <li>
                                            <textarea name="content" id="" cols="70" rows="5"></textarea>
                                        </li>
                                        <li>
                                            <input type="submit" value="提 交" class="btn" />
                                        </li>
                                    </ul>
                                </form>
                            </div>
                </div>
    
    
                <div class="sidebar">
                    <h2>最新留言</h2>
                    <ul>
                        <li><a href="">LAMP架构</a></li>
                        <li><a href="">JavaScript程序设计</a></li>
                        <li><a href="">CSS样式</a></li>
                        <li><a href="">XTHML结构</a></li>
                    </ul>
                </div>
            </div>
            <div style="clear:both;"></div>
            <!-- 公共底部 -->
            <div class="footer">
                <p><a href="">LD Studio</a> © 2009-2012 版权所有</p>
            </div>
        </div>
    </body>
    
    </html>
    

      

    最后启动app.js

    留言板实现完成!

  • 相关阅读:
    sql语句技巧
    逻辑查询处理的步骤
    left join 和 left outer join的区别
    SQL 笛卡尔积
    SQL 分类
    显示数据库中的表
    数据库备份 恢复
    增删主键及修改表名
    Securing Data笔记
    System Monitoring之"文件系统"
  • 原文地址:https://www.cnblogs.com/qqfontofweb/p/6678951.html
Copyright © 2011-2022 走看看