首页 前端知识 开发一个简单的留言板应用——使用 Node.js 、Express 库 和 jQuery 库来实现一个简单的留言板应用程序

开发一个简单的留言板应用——使用 Node.js 、Express 库 和 jQuery 库来实现一个简单的留言板应用程序

2024-02-29 12:02:29 前端知识 前端哥 368 507 我要收藏

目录

效果展示

Message boards开发步骤

项目初始化

安装包

新建文件夹

新建服务

新建页面

界面功能开发

前端

后端

写在后面


1.设计背景

本项目主要训练综合运用node+express技术搭建后台,html+css+JavaScript搭建前端页面,培养分析问题和解决问题的能力。

2.设计题目

题目描述:

你正在开发一个简单的留言板应用,用户可以在网页上发布留言并查看已发布的留言。请根据以下要求完成代码实现。

3.设计要求

前端任务:

在HTML页面上创建一个表单,包含以下字段:

昵称:用户输入自己的昵称。

留言内容:用户输入要发布的留言内容。

使用JavaScript/jQuery编写前端逻辑,实现以下功能:

在表单提交前对用户输入进行验证,验证不通过时阻止表单提交并给出相应提示信息。

验证昵称和留言内容是否为空。

使用jQuery的Ajax方法,将表单数据以JSON格式发送到后端的"/api/messages"路由,并在成功后刷新留言列表显示最新的留言。

后端任务:

使用Node.js和Express框架创建一个服务器应用程序。

创建一个POST路由"/api/messages",接收来自前端的留言数据,并进行后端处理。

将接收到的留言数据保存到一个数组中(每个留言对象包含昵称和留言内容)。

创建一个GET路由"/api/messages",用于获取已发布的留言列表。

你需要完成以下任务:

在前端编写HTML、CSS和JavaScript/jQuery代码,实现留言发布表单和验证逻辑。

在后端使用Node.js和Express框架,创建路由和处理逻辑。

将前后端代码连接起来,实现留言发布和留言列表的完整功能。

注意:为了简化题目,可以将留言数据保存在服务器端的数组中,无需使用真实的数据库


效果展示


Message boards开发步骤

项目初始化

新建文件夹,命名为`Message boards`,注意这里的命名不得为中文或其他特殊字符

npm init -y

安装包

npm i jquery express express-art-template

这里我们安装jQuery、express、express-art-template包,把他们都引入到了本地

新建文件夹

新建public,views文件夹,public下新建img,js,css文件夹,目录如下:

新建服务

在Message boards文件夹下新建`server.js`

const express=require('express')

const app = express()

//配置express-art-template,才可以render html
app.engine('html',require('express-art-template'))

app.get('/',(req,res) =>{
    res.render('index.html')
})

app.listen(3003,() => console.log('app listening on http://localhost:3003 '))

当用户get   / 时,就会渲染index.html

开通了3003端口号。

ip地址是链接到网络上的某台计算机

端口号是识别到该计算机上的某个软件

新建页面

在`views`文件夹下,新建`index.html`

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Message boards</title>
    <link href="../public/css/index.css" rel="stylesheet">
</head>
<body>
<div class="container">
    <h1><strong>留言板</strong></h1>
    <form id="message-form">
        <div class="form-group">
            <label for="nickname">昵称:</label>
            <input type="text" id="nickname" name="nickname" placeholder="*昵称" required>
            <div id="nickname-error-message" class="error-message"></div>
        </div>
        <div class="form-group">
            <label for="content">留言内容:</label>
            <textarea id="content" name="content" placeholder="来都来了,不留下点什么吗?" required></textarea>
            <div id="content-error-message" class="error-message"></div>
        </div>
        <div class="text-center">
            <button type="submit">提交留言</button>
        </div>
    </form>
    <div id="messages"></div>
</div>

</body>
</html>

在`public`文件夹的css文件夹下,新建`index.css`

body {
    background-color: #f6f6f6;
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}

.container {
    max-width: 600px;
    margin: 20px auto;
    padding: 20px;
    background-color: #ffffff;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    border-radius: 10px;
}

h1 {
    text-align: center;
    margin-bottom: 20px;
    color: #002FA7;
}

.form-group {
    margin-bottom: 20px;
}

label {
    display: block;
    font-weight: bold;
    margin-bottom: 5px;
}

input[type="text"]{
    width: 95%;
    padding: 10px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

textarea {
    width: 95%;
    height: 100px;
    padding: 10px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

.error-message {
    color: red;
    margin-top: 5px;
}

button {
    display: block;
    width: 80%;
    padding: 10px;
    margin: 30px auto;
    background-color: #002FA7;
    color: #ffffff;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

button:hover {
    background-color: #3f51b5;
}

.text-center {
    text-align: center;
}

.message {
    margin-bottom: 20px;
    padding: 10px;
    background-color: #f0f0f0;
    border: 1px solid #ccc;
    border-radius: 4px;
}

.message .nickname {
    font-weight: bold;
}

.message .content {
    margin-top: 5px;
}

注意:在index.html中添加<link href="../public/css/index.css" rel="stylesheet">引入

界面功能开发

  • 前端

function getMessages() {

这个函数用于获取留言信息。它使用 jQuery 的 $.ajax() 函数发起一个 GET 请求,从 /api/messages URL 获取留言数据。

$.ajax({
    type: 'GET',
    url: '/api/messages',
    success: function (data) {

$.ajax() 函数用于异步地向服务器发送 HTTP 请求。这里我们指定了请求类型为 GET,URL 为 /api/messages。当请求成功时,success 函数会被调用,数据会保存在 data 参数中。

const messages = data.messages;

从服务器返回的数据中,我们提取了一个名为 messages 的数组,并将其保存在本地变量 messages 中。

const messages = data.messages;

这里使用 jQuery 选择器选中了页面中的 #messages 元素(一个空的 <div>),并使用 empty() 方法清空其中的所有子元素。这是为了在更新留言时清除旧的留言信息。

messages.forEach(function (message) {
    const $messageDiv = $('<div>').addClass('message');
    const $nicknameDiv = $('<div>').addClass('nickname').text(message.nickname);
    const $contentDiv = $('<div>').addClass('content').text(message.content);
    $messageDiv.append($nicknameDiv).append($contentDiv);
    $('#messages').append($messageDiv);
});

这个 forEach() 循环遍历了从服务器返回的留言数组,并将每个留言信息用 HTML 元素的形式添加到页面中。对于每个留言,我们创建了一个 <div> 元素,它包含两个子元素 <div>,分别用于显示昵称和留言内容。然后,我们使用 append() 方法将这些子元素添加到父元素中,并将其添加到 #messages 元素中。

error: function (xhr, status, error) {
    console.log(xhr.responseText);
}

如果 AJAX 请求失败,error 函数会被调用,并将错误信息输出到控制台中。

$(document).ready(function () {

这个函数用于在文档加载完毕后执行一些操作。在这里,我们将 getMessages() 函数和表单提交函数绑定到页面的加载事件上。

$('#message-form').submit(function (event) {
    event.preventDefault();

这个函数用于处理表单提交事件。我们首先调用 preventDefault() 方法,以防止表单默认提交操作的触发。

const nickname = $('#nickname').val();
const content = $('#content').val();

这两行代码用于获取表单中用户输入的昵称和留言内容,分别保存在 nickname 和 content 变量中。

if (nickname.trim() === '') {
    $('#nickname-error-message').text('昵称不能为空');
    return;
}
if (content.trim() === '') {
    $('#content-error-message').text('留言内容不能为空');
    return;
}

这里使用条件语句来检查用户输入的昵称和留言内容是否为空。如果为空,我们将在页面上显示错误消息,并立即返回,以防止表单提交。

$.ajax({
    type: 'POST',
    url: '/api/messages',
    data: JSON.stringify({nickname: nickname, content: content}),
    contentType: 'application/json',
    success: function (data) {
        $('#nickname').val('');
        $('#content').val('');
        $('#nickname-error-message').empty();
        $('#content-error-message').empty();
        getMessages();
    },
    error: function (xhr, status, error) {
        console.log(xhr.responseText);
    }
});

这个函数使用 $.ajax() 函数发起一个 POST 请求,向 /api/messages URL 提交用户输入的昵称和留言内容。我们将数据作为 JSON 字符串发送,并将 contentType 设置为 application/json。当请求成功时,我们清空表单中的输入内容,并调用 getMessages() 函数,以更新页面上的留言信息。如果请求失败,则将错误信息输出到控制台中。

总的来说,这段代码使用了 jQuery 库来实现一个简单的留言板应用程序。它通过 AJAX 技术从服务器获取留言信息,并将其显示在页面上。它还允许用户提交新的留言信息,以及对输入信息进行基本的验证。

  • 后端

此项目后端是一个基于 Node.js 和 Express 的后端应用程序,用于保存和获取留言信息。下面内容在server.js内编写

// 保存留言数据的数组
let messages = [];

这个数组用于保存所有的留言信息。在这个示例中,我们将它声明为一个空数组,以便在以后添加新的留言信息时使用。

app.post('/api/messages', function (req, res) {

这个函数处理 POST 请求,用于保存用户提交的留言。

const nickname = req.body.nickname;
const content = req.body.content;

从请求体中获取用户提交的昵称和留言内容,并分别保存在本地变量 nickname 和 content 中。

messages.push({nickname: nickname, content: content});

将用户提交的留言信息保存到 messages 数组中,作为一个对象的形式。

res.status(200).send('留言已发布');

向客户端发送 HTTP 响应。我们使用 status() 方法设置状态码为 200,表示请求成功。然后,我们使用 send() 方法将一条简单的消息发送给客户端,以告诉用户留言已经成功发布。

app.get('/api/messages', function (req, res) {

这个函数处理 GET 请求,用于获取所有留言信息。我们使用 Express 应用程序对象的 get() 方法来指定 URL 和回调函数。

res.status(200).json({messages: messages});

向客户端发送 HTTP 响应。我们使用 status() 方法设置状态码为 200,表示请求成功。然后,我们使用 json() 方法将一个包含所有留言信息的对象发送给客户端,这个对象包含一个名为 messages 的属性,它的值是 messages 数组。

总的来说,这段代码使用了 Node.js 和 Express 库来实现一个简单的留言板应用程序的后端。它允许客户端通过 HTTP 请求向服务器提交新的留言信息,并将这些信息保存到 messages 数组中。它也允许客户端通过 HTTP 请求获取所有的留言信息。


写在后面

文章写作不易,对您有帮助的话,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

本项目代码已开源,可以私信或留言。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/2970.html
评论
会员中心 联系我 留言建议 回顶部
复制成功!