node学习案例留言板

1.初始化项目:npm init
2.安装项目依赖

cnpm i body-parser ejs express moment morgan --save

3.项目结构
在这里插入图片描述
app.js:

const express = require('express')
const bodyParser = require('body-parser')
const morgan = require('morgan')
const moment = require('moment')
const path = require('path')
const app = express()
// 注册模板引擎
app.set('views',path.join(__dirname,'views'))
app.set('view engine','ejs')

//设置全局变量,服务器整个生命周期
let entries = []
app.locals.entries = entries
// 设置用户表单提交数据的接收中间件,所有提交的信息都会保留在req.body
app.use(bodyParser.urlencoded({
    
    extended:false})) //不进行编码

// app.use(express.static(path.join(__dirname,'views')))
app.get('/',(req,res)=>{
    
    
    res.render('index')
})
app.get('/new',(req,res)=>{
    
    
    res.render('new')
})
//数据提交
app.post('/new',(req,res)=>{
    
    
    console.log(req.body)
    if(!req.body.title|| !req.body.content) {
    
    
        res.status(400).send('留言必须要有标题和内容!')
        return
    }

    //保留用户的留言
    entries.push({
    
    
        title: req.body.title,
        content:  req.body.content,
        published: moment(new Date()).format('YYYY-MM-DD hh:mm:ss')
    })

    //回到主界面 重定向
    res.redirect('/')
})
//渲染404
app.use((req,res)=>{
    
    
    res.status(404).render('404')
})

app.listen(3001,()=>{
    
    
    console.log('服务器已经启动了')
})

index.ejs:

<%- include('header.ejs') -%>
<h2 class="text-center mt-5">留言板</h2>
<div class="text-center">
    <a href="/new" class="btn btn-sm btn-danger">
        我要留言
    </a>
</div>

<div class="container mt-5 mb-5">
    <div class="row">
        <% if(entries.length) {
    
    %>
            <% entries.forEach(function (entry) {
    
    
             %>
                <div class="card mb-3" style="width: 100%;">
                    <div class="card-body">
                        <h5 class="card-title"><%= entry.title %></h5>
                        <h6 class="card-subtitle mb-2 text-muted"><%= entry.published %></h6>
                        <p class="card-text"><%= entry.content %></p>
                    </div>
                </div>
            <% }) %>
        <% } else {
    
     %>
            暂无留言!<a href="/new">去添加一条留言</a>
        <% } %>
    </div>
</div>
<%- include('footer.ejs') -%>

new.ejs

<%- include('header.ejs') -%>
<div class="container">
    <h3 class="text-center mt-5 mb-2">
        请写下您的留言
    </h3>
    <form method="post" role="form">
        <div class="form-group">
            <label for="title">留言标题:</label>
            <input type="text" class="form-control" id="title" name="title" placeholder="请输入标题..." required />
        </div>
        <div class="form-group">
            <label for="content">留言内容:</label>
            <textarea rows="5" class="form-control" id="content" name="content" placeholder="请输入留言内容..." required ></textarea>
        </div>
        <div class="form-group">
            <input type="submit" value="提交留言" class="btn btn-danger float-right">
        </div>
    </form>
</div>
<%- include('footer.ejs') -%>

header.ejs

<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" >
    <title>留言板</title>
    <!-- Bootstrap -->
</head>
<body>



footer.ejs

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" ></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

404.ejs

<%- include('header.ejs') -%>
<div class="container text-center mt-5 pt-5 text-danger">
    <h2>404!您访问的页面不存在!</h2>
</div>
<%- include('footer.ejs') -%>

猜你喜欢

转载自blog.csdn.net/qq_44540152/article/details/119907428