Ошибка типа: cb не является функцией в nodejs?

#javascript #node.js #mongodb #mongoose #error-handling

Вопрос:

(узел:13384) Необработанное предупреждение об ошибке: Ошибка типа: cb не является функцией

Я использую passport js для аутентификации на своем веб-сайте, я могу получить все маршруты, но когда я пытаюсь зарегистрироваться, это маршрутизатор post, поэтому в консоли я вижу эти ошибки, мои данные сохраняются в БД, но после публикации моя страница непрерывно загружается. вот эти ошибаются в том, что я получаю

(узел:13384) Необработанное предупреждение об ошибке: Ошибка типа: cb не является функцией в C:UsersSBCSDesktopAppBlognode_modulespassport-local-mongooseindex.js:247:59 в процедурных и проекциях (внутренний/процесс/task_queues.js:93:5) (Используется node --trace-warnings ... , чтобы показать, где было создано предупреждение) (узел:13384) Необработанное обещание Предупреждение: Необработанное обещание отклонение. Эта ошибка возникла либо в результате включения асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch(). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict (см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (идентификатор отклонения: 1) (узел:13384) [DEP0018] Предупреждение об устаревании: Необработанные отклонения обещаний считаются устаревшими. В будущем отказы в обещаниях, которые не будут обработаны, приведут к прекращению Node.js процесс с ненулевым кодом выхода.

а вот мой почтовый код маршрутизатора

   app.post("/sign-up",(req,res)=>{

    const username = req.body.username
    const email = req.body.email
    const password = req.body.password

 User.register( {username:username}, req.body.email,req.body.password ,(err,user)=>{
     if(err){
         console.log(err);
         res.redirect("/sign-up")
        }else{
passport.authenticate("local" )(req,res, function (){
    res.redirect('/compose')
})
     }
     

 })
 

и вот моя связь с мангустом

     mongoose.connect('mongodb://localhost:27017/blog', {useNewUrlParser: true, useUnifiedTopology: true,useFindAndModify: false}).catch(err => console.log(err))
mongoose.set('useCreateIndex',true);
 

Спасибо

когда я получаю ошибку, узел js отсылает меня к этому коду модулей, смотрите здесь

 schema.statics.register = function(user, password, cb) {
// Create an instance of this in case user isn't already an instance
if (!(user instanceof this)) {
  user = new this(user);
}

const promise = Promise.resolve()
  .then(() => {
    if (!user.get(options.usernameField)) {
      throw new errors.MissingUsernameError(options.errorMessages.MissingUsernameError);
    }
  })
  .then(() => this.findByUsername(user.get(options.usernameField)))
  .then(existingUser => {
    if (existingUser) {
      throw new errors.UserExistsError(options.errorMessages.UserExistsError);
    }
  })
  .then(() => user.setPassword(password))
  .then(() => user.save());

if (!cb) {
  return promise;
}

promise.then(result => cb(null, result)).catch(err => cb(err));
 

};
это код модуля passport-local-мангуст

Комментарии:

1. спасибо , но все равно сейчас я тоже начинаю ошибаться

2. ты получаешь err … то же err самое ? или по-другому err ?

3. сэр, я получаю ту же ошибку, что и раньше

4. пока ничего не изменится, показывая ошибку, я читал API и использовал, но он также показывает ошибку.

5. сэр, я добавил еще немного кода, посмотрим, пойму ли я что-нибудь

Ответ №1:

я получил ответ

 this cause by
 

User.register( {имя пользователя:имя пользователя}, req.body.email,req.body.пароль ,(ошибка,пользователь)=>{
если(ошибка){

строка кода,и, потратив на это больше времени, я нашел какое-то решение, решение здесь

 User.register({username: req.body.username}, req.body.password, function(err, user){
 

также, если вы хотите отправить имя пользователя, вы можете отправить его следующим образом

 User.register({username: req.body.username,name: req.body.registerName}, req.body.password, function(err, user){
 

Спасибо…..