Можете ли вы назвать два обещания из одного контроллера? - PullRequest
0 голосов
/ 01 февраля 2020

Это сообщение об ошибке, которое я получаю, когда я go направляет /signup/confirm/:id

Ошибка: Передаваемый аргумент должен содержать одну строку из 12 байтов или строка из 24 шестнадцатеричных символов в новом ObjectID (C: \ Users \ royalBishop101 \ Desktop \ Projects \ node-blog \ node_modules \ bson \ lib \ bson \ objectid. js: 59: 11) в Function.findById ( C: \ Users \ royalBishop101 \ Desktop \ Projects \ node-blog \ model \ signups. js: 32: 51)

Вот мой код контроллера:

exports.confirm = (req, res) => {
    const id = req.params.id;
    Signups.findById(id)
        .then(data => {
            newUser = new User(data.username, data.password, data.name);
            newUser.save()
                .then(() => {
                    Signups.deleteSignup(id)
                        .then(() => {
                            res.redirect('admin');
                        })
                        .catch(err => console.log(err));
                })
                .catch(err => console.log(err));
        })
        .catch(err => console.log(err));
}

Вот мой код модели:

class Signups {
    constructor(name, password, username) {
        this.name = name;
        this.password = password;
        this.username = username;
    }

    static findById(id) {
        const db = getDb();
        return db.collection('signup').find({
            _id: new mongodb.ObjectId(id)
        }).next();
    }

    static deleteSignup(id) {
        const db = getDb();
        return db.collection('signup').deleteOne({
            _id: new mongodb.ObjectId(id)
        });
    }
}

Если я закомментирую либо шаг 1, либо шаг 2 и выполню код, он сработает, а не выдаст эту ошибку, но если я раскомментирую один из них, где они оба будут беги тогда я получаю ошибку.

Так что я знаю, что это не ошибка в моем методе findbyId в моей модели, как говорится в ошибке. Не уверен, что происходит.

Заранее спасибо за любую помощь.

1 Ответ

1 голос
/ 01 февраля 2020

Единственная причина, по которой ваш objectId правильный, но вы получили какое-то сообщение, подобное тому, что пробел в вашем идентификаторе:

Убедитесь, что для удаления всех используйте trim() пустое пространство. Вы можете сделать это, как показано ниже:

class Signups {
    constructor(name, password, username) {
        this.name = name;
        this.password = password;
        this.username = username;
    }

    static findById(id) { 
        console.log('Before: Find');
        console.log(id);
        console.log(id.length);
        id = id.trim();
        console.log('After: Find');
        console.log(id);
        console.log(id.length);
        const db = getDb();
        return db.collection('signup').find({_id: new mongodb.ObjectId(id) }).next();
    }

    static deleteSignup(id) { 
         console.log('Before: Delete');
         console.log(id);
         console.log(id.length);
         id = id.trim();
         console.log('After: Delete');
         console.log(id);
         console.log(id.length);
         const db = getDb();
         return db.collection('signup').deleteOne({_id: new mongodb.ObjectId(id)}); 
     }

}

Теперь вы можете попробовать еще раз, и я надеюсь, что это сработает.

Надеюсь, это поможет вам.

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