Функция возвращает неопределенное значение, а массив не обновляется. - PullRequest
0 голосов
/ 28 марта 2019

Я работаю над проектом и текущей реализацией, в которой он определяет массив 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 года», но массив содержит три полученных семестракогда сервер был запущен.

Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...