使用 Node.js 创建一个在线问卷调查系统
在当今数字化的时代,在线问卷调查系统已成为收集反馈、表达意见和进行市场研究的便捷工具。借助 Node.js 的强大能力,我们可以构建一个简单而高效的在线问卷调查系统,让用户能够创建问卷、填写问卷及查看调查结果。本文将带你逐步实现这一系统,包含示例代码和详细讲解。
项目概述
本项目将建设以下功能:
- 用户能够创建问卷:用户可以定义问卷的标题和问题。
- 用户能够填写问卷:其他用户可以进入问卷并填写相关答案。
- 用户能够查看结果:用户可以查看自己创建的问卷的结果统计。
环境准备
在开始之前,请确保您已经安装了以下软件:
- Node.js(版本为14.x 或更高)
- MongoDB(用于存储问卷数据)
此外,还推荐安装一些额外的工具以提高开发体验,比如 Postman(用于测试 API)。
创建项目
步骤 1:初始化项目
首先,在您的终端中创建一个新的文件夹来存放项目文件,并进入该文件夹:
mkdir online-survey-system
cd online-survey-system
然后,初始化一个新的 Node.js 项目:
npm init -y
步骤 2:安装必要的依赖
我们需要安装一些库来构建我们的系统,包括 Express(Web 框架)、Mongoose(MongoDB ODM),以及其他库:
npm install express mongoose body-parser cors
- express 用于创建 HTTP 服务器和路由。
- mongoose 用于与 MongoDB 进行交互。
- body-parser 用于解析请求体。
- cors 用于跨域请求处理。
步骤 3:创建基本文件结构
接下来,我们创建一些基本文件,以便组织代码:
mkdir models routes
touch server.js models/survey.js routes/survey.js
编写代码
步骤 4:设置服务器
在 server.js
文件中,我们将设置 Express 服务器并连接到 MongoDB:
// server.js
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
const surveyRoutes = require('./routes/survey');
const app = express();
const PORT = process.env.PORT || 5000;
// Middleware
app.use(cors());
app.use(bodyParser.json());
// MongoDB connection
mongoose.connect('mongodb://localhost:27017/surveyDB', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// Routes
app.use('/api/surveys', surveyRoutes);
// Start the server
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
步骤 5:创建问卷模型
在 models/survey.js
中,我们定义问卷的数据库模型:
// models/survey.js
const mongoose = require('mongoose');
const surveySchema = new mongoose.Schema({
title: {
type: String,
required: true
},
questions: [{
question: {
type: String,
required: true
},
answers: [{
type: String
}]
}]
});
module.exports = mongoose.model('Survey', surveySchema);
步骤 6:创建路由处理问卷逻辑
在 routes/survey.js
中,我们实现问卷的创建、填写和查看功能:
// routes/survey.js
const express = require('express');
const router = express.Router();
const Survey = require('../models/survey');
// 创建问卷
router.post('/create', async (req, res) => {
const { title, questions } = req.body;
const survey = new Survey({ title, questions });
try {
const savedSurvey = await survey.save();
res.status(201).json(savedSurvey);
} catch () {
res.status(400).json({ message: err.message });
}
});
// 填写问卷
router.post('/:id/submit', async (req, res) => {
const surveyId = req.params.id;
const = req.body.answers; // 应该是一个数组
try {
const survey = await Survey.findById(surveyId);
survey.questions.forEach((question, index) => {
question.answers.push(answers[index]);
});
await survey.save();
res.status(200).json({ message: 'Survey submitted successfully!' });
} catch (err) {
res.status(400).json({ message: err.message });
}
});
// 查看问卷结果
router.get('/:id/results', async (req, res) => {
const surveyId = req.params.id;
try {
const survey = await Survey.findById(surveyId);
res.status(200).json(survey);
} catch (err) {
res.status(404).json({ message: err.message });
}
});
module.exports = router;
步骤 7:测试 API
现在我们可以使用 Postman 或其他 API 测试工具来测试我们的 API。
-
创建问卷:
- POST 请求到
http://localhost:5000/api/surveys/create
- 请求体示例:
{ "title": "客户满意度调查", "questions": [ { "question": "您对我们的服务满意吗?" }, { "question": "您有什么改进建议?" } ] }
- POST 请求到
-
填写问卷:
- POST 请求到
http://localhost:5000/api/surveys/{surveyId}/submit
{surveyId}
替换为实际创建的问卷 ID- 请求体示例:
{ "answers": ["非常满意", "希望可以增加服务种类"]
- POST 请求到
-
查看问卷结果:
- GET 请求到
http://localhost:5000/api/surveys/{surveyId}/results
{surveyId}
替换为实际创建的问卷 ID
- GET 请求到
总结
通过以上步骤,我们成功地创建了一个简单的在线问卷调查系统。用户可以创建问卷、填写问卷并查看结果。这是一个基本的示例,您可以根据需求扩展和优化。可以考虑添加用户身份验证、问卷时间限制、问卷样式、数据可视化等功能,使系统更加完善。