Я работаю над проектом и текущей реализацией, в которой он определяет массив currentTerm при запуске сервера.Поскольку администратор сайта может заходить в настройки и изменять текущие условия, я хотел бы иметь возможность изменять этот массив каждый раз, когда вносятся изменения.
Однако я делаю один и тот же вызовизменить массив, но его содержимое не изменяется.
Вот код.
Я попытался изменить функцию, чтобы она возвращала массив с новыми текущими семестрами, чтобыустановите массив равным тому, что возвращает функция, но функция, кажется, возвращает неопознанный
Это то, что у меня есть сейчас, я помещаю термины в currentTerms, но всякий раз, когда я снова вызываю функцию, содержимоемассив все тот же.(По сути, он сохраняет только те термины, которые были получены при первом вызове)
var bodyParser = require('body-parser');
var Project = require('../models/projects');
var Term = require('../models/terms');
var authProvider = require('../services/AuthorizationProvider');
module.exports = function (app, express) {
var apiRouter = express.Router();
var currentTerm = [];
var findActiveTerm = function () {
Term.find({
'status.currentSemester': true
}, '_id',
function (err, terms) {
if (err || !terms) { // Failed to find the current semester
terms = Term.createDefaultTerm();
}
terms.map(function (term) {
currentTerm.push(term._id);
})
});
}
//Find the active term and set currentTerm to it
findActiveTerm();
//route get or adding projects to a users account
apiRouter.route('/projects')
.post(
authProvider.authorizeByUserType([authProvider.userType.PiCoPi, authProvider.userType.StaffFaculty]),
function (req, res) {
console.log(req.body.faculty);
//req.body.term = currentTerm; // TODO: Should not automatically set new projects to be set to currentTerm
//Validate to ensure student counts isn't negative or student count is greater than maximum.
var studentCount = 0;
var maxStudentCount = 0;
// user provided a min number of students
if (req.body.firstSemester)
studentCount = Number(req.body.firstSemester);
// user provided a max number of students
if (req.body.maxStudents)
maxStudentCount = Number(req.body.maxStudents);
// user didnt supply a min and max number of students, make it a really big number so anyone can join
if (isNaN(studentCount) || isNaN(maxStudentCount)) {
req.body.firstSemester = "1";
req.body.maxStudents = "256";
}
// user didnt supply a min and max number of students, make it a really big number so anyone can join
if (studentCount == 0 && maxStudentCount == 0) {
req.body.firstSemester = "1";
req.body.maxStudents = "256";
}
if (studentCount < 0 || maxStudentCount < 0) {
res.status(400);
return res.send("firstSemester cannot be less than 0 or maxStudents cannot be less than 0.");
}
if (studentCount > maxStudentCount) {
res.status(400);
return res.send("Count cannot be greater than the maximum.");
}
Project.create(req.body, function (err) {
if (err) {
res.status(400);
return res.send(err);
}
return res.json({
success: true
});
});
})
.get(
authProvider.authorizeAll,
function (req, res) {
//findActiveTerm();
console.log(currentTerm);
Project.find({
//term: currentTerm
term: currentTerm
}, function (err, projects) {
if (err) {
console.log(err);
return res.send('error');
}
return res.json(projects);
});
});
}
Это моя измененная функция.Здесь я пытаюсь создать временный массив, который будет возвращен, и затем установить currentTerms равным временному массиву.Однако тип возвращаемого значения кажется неопределенным каждый раз.Я попытался поместить его во все закомментированные позиции (1,2,3), и все они возвращают неопределенное значение.
var findActiveTerm = function () {
var tempArr = [];
Term.find({
'status.currentSemester': true
}, '_id',
function (err, terms) {
if (err || !terms) { // Failed to find the current semester
terms = Term.createDefaultTerm();
}
terms.map(function (term) {
//currentTerm.push(term._id);
tempArr.push(term._id);
//1
return tempArr;
})
//2
return tempArr;
});
//3
return tempArr;
}
Как упоминалось ранее, я хотел бы иметь возможность изменить массив,так что всякий раз, когда администратор изменяет текущие термины в БД, эти изменения отражаются в массиве.
Например: 1. Когда сервер запускается, текущие термины: весна 2019, лето 2019 и осень 2019.
Администратор входит в настройки веб-сайта и меняет текущие семестры только на весну 2019 года.
Массив должен теперь включать только «весну 2019 года», но массив содержит три полученных семестракогда сервер был запущен.
Любая помощь будет принята с благодарностью!