📅  最后修改于: 2023-12-03 15:22:15.742000             🧑  作者: Mango
本篇介绍如何使用 Pugjs、Node.js、MongoDB、Express 搭建一个简单的反馈表应用。反馈表可以用来收集用户对产品的反馈意见,以便开发团队及时了解用户需求并作出相应的调整。
Pugjs 是一个非常强大的 templating engine,它可以将基于缩进的模板语法转换成 HTML。Pugjs 可以帮助我们更轻松地编写模板文件,并提供更好的可读性,让前端开发者更快地上手。在本应用中,我们使用 Pugjs 来编写前端页面。
Node.js 是一个基于 JavaScript 的运行时环境,它可以跨平台运行,并提供了一系列强大的 API,以便处理 I/O、网络和文件系统等任务。在本应用中,我们使用 Node.js 来编写后端服务器代码。
MongoDB 是一款流行的 NoSQL 数据库,它支持灵活的数据模型设计、高效的读写操作、可靠的数据存储和分布式部署。在本应用中,我们使用 MongoDB 来存储用户提交的反馈数据。
Express 是一个流行的 Node.js Web 框架,它提供了一系列强大的路由、中间件、错误处理和模板引擎等功能,以便快速搭建 web 应用。在本应用中,我们使用 Express 来搭建后端服务器和处理用户请求。
在该应用中,我们需要存储用户反馈数据,因此需要设计相应的数据模型。我们可以使用 Mongoose 库来定义数据模型,并将其映射到 MongoDB 数据库中。
// app/models/feedback.js
const mongoose = require('mongoose');
const feedbackSchema = mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true },
message: { type: String, required: true },
createTime: { type: Date, default: Date.now },
});
module.exports = mongoose.model('Feedback', feedbackSchema);
在上面的代码中,我们定义了 Feedback 数据模型,包含四个字段:name(用户名)、email(用户邮箱)、message(用户反馈信息)和 createTime(反馈时间)。其中,name、email 和 message 字段都是必需的,createTime 字段默认为当前时间。
在该应用中,我们需要处理两个主要的请求:渲染反馈表页面和提交反馈数据。
// app/routes/index.js
const express = require('express');
const router = express.Router();
const Feedback = require('../models/feedback');
// 渲染反馈表页面
router.get('/', (req, res) => {
res.render('index', { title: 'Feedback Form', message: 'Please leave your feedback below:' });
});
// 提交反馈数据
router.post('/', (req, res) => {
const feedback = new Feedback({
name: req.body.name,
email: req.body.email,
message: req.body.message,
});
feedback.save((err) => {
if (err) {
console.error(err);
res.sendStatus(500);
} else {
res.redirect('/');
}
});
});
module.exports = router;
在上面的代码中,我们定义了两个路由:GET / 和 POST /。GET / 路由用于渲染反馈表页面,POST / 路由用于提交反馈数据。当用户提交反馈数据时,我们创建一个 Feedback 实例,并调用 save 方法保存到数据库中。如果保存成功,我们重定向到首页;否则,返回 500 状态码并输出错误信息。
在该应用中,我们需要使用一些中间件来处理请求和响应数据。其中,body-parser 中间件用于解析请求体数据,morgan 中间件用于记录请求日志,errorhandler 中间件用于处理错误信息。
// app.js
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const morgan = require('morgan');
const mongoose = require('mongoose');
const errorHandler = require('errorhandler');
const indexRouter = require('./routes/index');
const app = express();
// 连接 MongoDB 数据库
mongoose
.connect('mongodb://localhost/feedback-form', {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
})
.then(() => console.log('Database connected successfully'))
.catch((err) => console.error(err));
// 配置模板引擎和静态资源目录
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(express.static(path.join(__dirname, 'public')));
// 使用中间件
app.use(bodyParser.urlencoded({ extended: false }));
app.use(morgan('dev'));
app.use(errorHandler());
// 使用路由
app.use('/', indexRouter);
// 启动服务器
app.listen(3000, () => console.log('Server started on port 3000'));
module.exports = app;
在上面的代码中,我们使用了 body-parser、morgan 和 errorHandler 中间件,并定义了一个 / 路由来处理用户请求。其中,body-parser 中间件用于解析请求体数据;morgan 中间件用于记录请求日志;errorHandler 中间件用于处理代码中的错误信息。我们还使用了 Mongoose 库来连接 MongoDB 数据库,并在启动服务器时监听 3000 端口。
在该应用中,我们需要使用 Pugjs 模板引擎来编写反馈表页面。
// views/index.pug
doctype html
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
h1= message
form(method='post')
label(for='name') Name:
input(type='text', name='name', required)
br
label(for='email') Email:
input(type='email', name='email', required)
br
label(for='message') Message:
textarea(name='message', rows='5', required)
br
button(type='submit') Submit
在上面的代码中,我们定义了一个反馈表页面,包含三个必需字段:name、email 和 message。当用户输入完毕后,可以点击 Submit 按钮提交反馈数据。该页面使用了 Bootstrap 样式表,并通过 Pughs 模板引擎渲染获得想要的HTML代码。
该应用使用 Pugjs、Node.js、MongoDB、Express 技术栈,帮助开发者快速搭建一个简单的反馈表应用。我们介绍了各个部分展示所用的技术,并演示了如何从数据模型设计、路由设计、中间件设计以及页面设计等方面构建该应用。有了这些知识作为基础,您可以更快地掌握这一技术栈,写出更高效、更灵活的应用。