Ошибка типа Type in Post Route - PullRequest
1 голос
/ 01 мая 2020

Я создаю очень простой c API, похожий на Yelp. В моем POST-маршруте для предприятий я могу добавить бизнес в мой локальный экземпляр Mon go DB, однако, когда я делаю второй вызов БД по тому же маршруту в pu sh идентификатор нового бизнес-документа в «business» массив в моей коллекции пользователей (чтобы зарегистрировать бизнес под владельцем) я получаю сообщение об ошибке в функции, ответственной за это: 'TypeError: "Cannot convert undefined or null to object"' Вот мой код:

Маршрут API POST, который добавляет бизнес и пытается зарегистрировать пользователя

Функция, которая пытается добавить бизнес-идентификатор в коллекцию пользователей (код ошибки)

const { getDb, getUserId } = require('../lib/mongo')

//function to add a new business
exports.userAddBusiness = async function (businessId) {
    const db = getDb()
    const collection = db.collection('users')
    try {
        result = await collection.updateOne({
            $push: { "businesses": businessId }
        })
        return "Business " + businessId + " registered under user " + getUserId()
    } catch (error) {
        return "Failed to register business " + businessId + " under user " + getUserId() + "because " + error
    }
}
/*
 * Route to create a new business.
 */
router.post('/', async function (req, res, next) {
  //if request passes validation
  if (validation.validateAgainstSchema(req.body, businessSchema)) {
    try {
      const business = validation.extractValidFields(req.body, businessSchema)
      //insert the business into the db
      let generatedId = await addBusiness(business)
      console.log(generatedId)
      //register business under owner and print result
      let res = await userAddBusiness(generatedId)
      console.log(res)
      res.status(201).json({
        id: generatedId,
        links: {
          business: `/businesses/${generatedId}`
        }
      })
    } catch (err) {
      res.status(400).json({
        error: "Failed to add and register new business" + err
      })
    }
  } else {
    res.status(400).json({
      error: "Request body is not a valid business object"
    })
  }
})

Вот стек ошибок, когда я удаляю блоки try / catch из обоих блоков кода:

 Business 5eab79e21f9878001963a747 has been successfully added.
api             | (node:25) UnhandledPromiseRejectionWarning: TypeError: Cannot convert undefined or null to object
api             |     at Function.keys (<anonymous>)
api             |     at checkForAtomicOperators (/usr/src/app/node_modules/mongodb/lib/operations/collection_ops.js:61:23)
api             |     at Collection.updateOne (/usr/src/app/node_modules/mongodb/lib/collection.js:749:15)
api             |     at exports.userAddBusiness (/usr/src/app/models/users.js:8:39)
api             |     at /usr/src/app/api/businesses.js:50:23
api             |     at processTicksAndRejections (internal/process/task_queues.js:86:5)
api             | (node:25) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)

1 Ответ

0 голосов
/ 01 мая 2020

Кажется, что я упустил из виду наиболее очевидный аспект функции updateOne: передача идентификатора do c ... Надеюсь, что когда кто-то ищет проблему, похожую на эту, он найдет этот пост и быстро исправит его. ошибка.

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