一、创作目的&适用人群
在六一这个充满乐趣的节日里,我希望通过猜成语小游戏,为中小学生提供一个"不一样"的节日体验,去感受中国文化和成语魅力所在。亲爱的小朋友们,让我们来完成猜成语小游戏吧!
二、页面展示
三、项目文件
采用前后端分离的方法,使得项目文件更清晰、更美观,以便程序员后续处理所遇到的BUG。
四、代码分析
四.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连接。
五、项目总结
通过Node.js作为后端,引入express框架,连接MongoDB大量的数据,实现可视化的猜成语游戏网页,减轻前端的内存压力,实现轻量化操作,同时,如果前/后端出现问题也便于查找和解决。
六、建议
欢迎大家提出自己的想法,我也很乐意做下一步改进!