我有这个使用 IOS创建的简单应用程序,它是一个问卷调查应用程序,每当用户点击播放时,它都会调用对node.js / express服务器的请求
从技术上讲,在用户点击答案后,它将转到下一个问题
我很困惑使用哪种方法来获取问题/问题
>一次获取所有数据并将其呈现给用户 – 这是一个数组
>使用下一个问题逐个获取数据作为用户进度 – 每个调用一个数据
API示例
// Fetch all the data at once
app.get(‘/api/questions’, (req, res, next) => {
Question.find({}, (err, questions) => {
res.json(questions);
});
});
// Fetch the data one by one
app.get('/api/questions/:id', (req, res, next) => {
Question.findOne({ _id: req.params.id }, (err, question) => {
res.json(question);
});
});
第一种方法的问题在于,假设有200个问题,mongodb一次获取并且可能慢于进行网络请求不会很慢
2号方法的问题,我无法想象如何做到这一点,因为每个问题都是独立的并且触发下一个api调用只是很奇怪,除非在问题mongodb中有一个计数器或一个级别.
为了清楚起见,这是Mongoose中的数据库设计问题
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const QuestionSchema = new Schema({
question: String,
choice_1: String,
choice_2: String,
choice_3: String,
choice_4: String,
answer: String
});
最佳答案 我会使用Dave的方法,但我会在这里详细介绍一下.
在您的应用中,创建一个包含问题的数组.然后还存储一个用户当前所在问题的值,例如将其称为索引.然后,您有以下伪代码:
index = 0
questions = []
现在你有了这个,一旦用户启动应用程序,加载10个问题(参见Dave的答案,使用MongoDB的跳过和限制),然后将它们添加到数组中.向您的用户提供问题[索引].一旦索引达到8(=第9个问题),通过API加载10个问题,并将它们添加到数组中.这样,您将始终可以为用户提供问题.