首页 前端知识 开发一个简单的留言板应用——使用 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
评论
会员中心 联系我 留言建议 回顶部
复制成功!