Я создаю очень простой 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)