创建一个在线问卷调查系统,用户可以创建、填写和查看结果

使用 Node.js 创建一个在线问卷调查系统

在当今数字化的时代,在线问卷调查系统已成为收集反馈、表达意见和进行市场研究的便捷工具。借助 Node.js 的强大能力,我们可以构建一个简单而高效的在线问卷调查系统,让用户能够创建问卷、填写问卷及查看调查结果。本文将带你逐步实现这一系统,包含示例代码和详细讲解。

项目概述

本项目将建设以下功能:

  1. 用户能够创建问卷:用户可以定义问卷的标题和问题。
  2. 用户能够填写问卷:其他用户可以进入问卷并填写相关答案。
  3. 用户能够查看结果:用户可以查看自己创建的问卷的结果统计。

环境准备

在开始之前,请确保您已经安装了以下软件:

  • 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。

  1. 创建问卷:

    • POST 请求到 http://localhost:5000/api/surveys/create
    • 请求体示例:
    {
      "title": "客户满意度调查",
      "questions": [
        { "question": "您对我们的服务满意吗?" },
        { "question": "您有什么改进建议?" }
      ]
    }
    
  2. 填写问卷:

    • POST 请求到 http://localhost:5000/api/surveys/{surveyId}/submit
    • {surveyId} 替换为实际创建的问卷 ID
    • 请求体示例:
    {
      "answers": ["非常满意", "希望可以增加服务种类"]
    
  3. 查看问卷结果:

    • GET 请求到 http://localhost:5000/api/surveys/{surveyId}/results
    • {surveyId} 替换为实际创建的问卷 ID

总结

通过以上步骤,我们成功地创建了一个简单的在线问卷调查系统。用户可以创建问卷、填写问卷并查看结果。这是一个基本的示例,您可以根据需求扩展和优化。可以考虑添加用户身份验证、问卷时间限制、问卷样式、数据可视化等功能,使系统更加完善。


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

书籍详情

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JJCTO袁龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值