MongoDB+Node.js实现六一猜成语小游戏

264 阅读2分钟

一、创作目的&适用人群

在六一这个充满乐趣的节日里,我希望通过猜成语小游戏,为中小学生提供一个"不一样"的节日体验,去感受中国文化和成语魅力所在。亲爱的小朋友们,让我们来完成猜成语小游戏吧!

二、页面展示

动画.gif

三、项目文件

采用前后端分离的方法,使得项目文件更清晰、更美观,以便程序员后续处理所遇到的BUG。

猜成语目录.png

四、代码分析

四.1、引入框架

express:用于创建服务器和处理 HTTP 请求
MongoClient:是MongoDB 的 Node.js 驱动程序,用于连接和操作 MongoDB 数据库
app&port:创建实例&端口号(3000)

const express = require('express');
const { MongoClient } = require('mongodb');
const app = express();
const port = 3000;

四.2、解决JSON格式&CORS跨域问题

跨域请求终端下载npm install cros模块即可

app.use(express.json());
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  next();
});

四.3、实现MongoDB连接

异步连接,获取数据库数据

class 成语数据库 {
  constructor() {
    this.client = new MongoClient(mongoUri);
    this.数据总量 = 0;
  }

  async 连接() {
    try {
      await this.client.connect();
      this.db = this.client.db(dbName);
      console.log('✅ 已成功连接到MongoDB');
      
      const collection = this.db.collection(collectionName);
      this.数据总量 = await collection.countDocuments();
      console.log(`📊 当前数据库共有 ${this.数据总量} 条成语数据`);
      
      return this.db;
    } catch (错误) {
      console.error('❌ 连接MongoDB失败:', 错误);
      throw 错误;
    }
  }

  async 断开连接() {
    try {
      await this.client.close();
      console.log('🛑 已断开MongoDB连接');
    } catch (错误) {
      console.error('断开连接失败:', 错误);
      throw 错误;
    }
  }
}

四.4、逻辑判断

接收到input框传来的值,对其做出判断,如果'是否正确'为真,自动调用'下一题'函数,否则,做前面的布尔值判断。

function 提交答案() {
  if (成语列表.length === 0) return;
  
  const 用户答案 = 成语输入框.value.trim();
  if (!用户答案) {
    alert("成语不能为空哦!");
    return;
  }
  
  const 是否正确 = 用户答案 === 成语列表[当前成语索引].letter;
  alert(是否正确 ? "你真棒,回答正确!" : "有点可惜,回答错误");
  if (是否正确) 下一题();
}

四.5、终端效果

每当用户运行服务器后,如果MongoDB连接成功,打印数据数量,当用户退出猜成语网页,即显示断开MongoDB连接。

猜成语终端.png

五、项目总结

通过Node.js作为后端,引入express框架,连接MongoDB大量的数据,实现可视化的猜成语游戏网页,减轻前端的内存压力,实现轻量化操作,同时,如果前/后端出现问题也便于查找和解决。

六、建议

欢迎大家提出自己的想法,我也很乐意做下一步改进!