使用 HTML和css 结合 node.js 写一个留言板案例,用Ajax请求,实现要求:首页显示其他用户留言 携带名称 及发表时间 2.发表留言 必须登录 3.实现账号 注册 登录 修改 忘记功能 4.留言删贴
时间: 2023-05-27 18:03:37 浏览: 152
【JavaScript源代码】javascript实现简单留言板案例.docx
由于不确定具体的数据结构和功能要求,以下只提供一个简单的示例代码供参考。
HTML:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<header>
<h1>留言板</h1>
<nav>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/login">登录</a></li>
<li><a href="/register">注册</a></li>
<li><a href="/logout">退出</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h2>留言列表</h2>
<ul id="message-list"></ul>
</section>
<section>
<h2>发表留言</h2>
<form id="message-form">
<input type="text" name="name" placeholder="姓名" required>
<textarea name="content" placeholder="留言内容" required></textarea>
<input type="submit" value="发表留言">
</form>
</section>
</main>
<footer>
<p>© 2021 xxxx公司</p>
</footer>
<script src="/js/jquery.js"></script>
<script src="/js/main.js"></script>
</body>
</html>
```
CSS:
```
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
header {
background-color: #333;
color: #fff;
padding: 10px;
}
nav ul {
list-style: none;
margin: 0;
padding: 0;
}
nav li {
display: inline-block;
margin-right: 10px;
}
nav a {
color: inherit;
text-decoration: none;
}
main {
margin: 20px;
}
h2 {
margin-top: 20px;
}
ul li {
margin-bottom: 10px;
}
label {
display: block;
margin-bottom: 5px;
}
input[type="text"], textarea {
display: block;
width: 100%;
padding: 5px;
margin-bottom: 10px;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 3px;
}
input[type="submit"] {
background-color: #333;
color: #fff;
border: none;
padding: 10px 20px;
border-radius: 3px;
cursor: pointer;
}
footer {
background-color: #ccc;
color: #666;
text-align: center;
padding: 10px;
}
```
JS:
```
// 首页加载时获取留言列表
$(document).ready(() => {
$.ajax({
url: '/api/messages',
method: 'GET',
success: (data) => {
if (data.success) {
updateMessageList(data.messages);
} else {
alert(data.error);
}
},
error: () => {
alert('获取留言列表失败');
}
});
});
// 发表留言
$('#message-form').submit((event) => {
event.preventDefault();
let formData = $(event.target).serialize();
$.ajax({
url: '/api/messages',
method: 'POST',
data: formData,
success: (data) => {
if (data.success) {
alert('发表留言成功');
updateMessageList(data.messages);
$('#message-form')[0].reset();
} else {
alert(data.error);
}
},
error: () => {
alert('发表留言失败');
}
});
});
// 更新留言列表
function updateMessageList(messages) {
let list = $('#message-list');
list.empty();
messages.forEach((message) => {
let li = $('<li></li>');
let header = $('<header></header>');
let name = $('<span></span>').text(message.name);
let time = $('<time></time>').text(new Date(message.time).toLocaleString());
let content = $('<p></p>').text(message.content);
let deleteButton = $('<button></button>').text('删贴');
deleteButton.click(() => {
if (window.confirm('确认删除该留言吗?')) {
$.ajax({
url: '/api/messages/' + message.id,
method: 'DELETE',
success: (data) => {
if (data.success) {
alert('删除留言成功');
updateMessageList(data.messages);
} else {
alert(data.error);
}
},
error: () => {
alert('删除留言失败');
}
});
}
});
header.append(name).append(' 发表于 ').append(time).append(deleteButton);
li.append(header).append(content);
list.append(li);
});
}
```
Node.js 后端路由及数据处理逻辑:
```
const express = require('express');
const bodyParser = require('body-parser');
const session = require('express-session');
const app = express();
// 各种中间件的配置...
// 首页展示留言列表
app.get('/', (req, res) => {
res.sendFile(__dirname + '/public/index.html');
});
// 获取留言列表的API接口
app.get('/api/messages', (req, res) => {
// 读取数据库中的留言信息
// ...
res.json({
success: true,
messages: messages
});
});
// 发表留言的API接口
app.post('/api/messages', (req, res) => {
if (!req.session.user) {
res.json({
success: false,
error: '请先登录'
});
return;
}
let name = req.body.name;
let content = req.body.content;
let time = new Date().getTime();
// 将留言信息写入数据库
// ...
res.json({
success: true,
messages: messages
});
});
// 删除留言的API接口
app.delete('/api/messages/:id', (req, res) => {
let id = req.params.id;
// 从数据库中删除指定id的留言
// ...
res.json({
success: true,
messages: messages
});
});
// 登录页面
app.get('/login', (req, res) => {
res.sendFile(__dirname + '/public/login.html');
});
// 登录处理
app.post('/login', (req, res) => {
let email = req.body.email;
let password = req.body.password;
// 根据email和password验证登录信息
// ...
req.session.user = { email: email };
res.json({
success: true
});
});
// 注册页面
app.get('/register', (req, res) => {
res.sendFile(__dirname + '/public/register.html');
});
// 注册处理
app.post('/register', (req, res) => {
let email = req.body.email;
let password = req.body.password;
// 将email和password写入数据库
// ...
req.session.user = { email: email };
res.json({
success: true
});
});
// 修改密码页面
app.get('/change-password', (req, res) => {
res.sendFile(__dirname + '/public/change-password.html');
});
// 修改密码处理
app.post('/change-password', (req, res) => {
let oldPassword = req.body.oldPassword;
let newPassword = req.body.newPassword;
if (验证旧密码是否正确) {
// 更新数据库中的密码
// ...
res.json({
success: true
});
} else {
res.json({
success: false,
error: '旧密码不正确'
});
}
});
// 忘记密码页面
app.get('/forgot-password', (req, res) => {
res.sendFile(__dirname + '/public/forgot-password.html');
});
// 忘记密码处理
app.post('/forgot-password', (req, res) => {
let email = req.body.email;
// 根据email发送重置密码链接到用户邮箱
// ...
res.json({
success: true
});
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
阅读全文