Существует API, как показано ниже.
try catch здесь опущен.

exports.test = async(req,res) ={amp}gt; { const {clientId} = req.body; // There is a function that makes an object to use repeatedly. function errorReason(arg1) { const errorLogs = new ErrorLogs({ clientId, reason: arg1, }); return errorLogs; } errorReason("server error").save(); 

И это тип clientId.

 clientId: mongoose.Schema.Types.ObjectId 

Когда я могу передать obejctId или пустую строку для clientId как request.body.
Но когда я отправляю пустую строку, возникает ошибка.

проверка не удалась: clientId: сбой приведения к ObjectID для значения «» по пути «clientId «

Как я могу сделать правильную функцию errorReason? Я не хочу сохранять «null» или «пустую строку» для clientId, даже если clientId является пустой строкой.
Я надеюсь, что не существует clientId для «новых ErrorLogs», когда clientId является пустой строкой.

  function errorReason(arg1) { const errorLogs = new ErrorLogs({ reason: arg1, }); return errorLogs; } 

Большое спасибо за чтение.

Вы можете достичь этого, сделав required поле в вашей схеме потребляющим функцию. Эта функция решает, является ли поле обязательным в зависимости от типа. Это позволит вам сохранить пустую строку. Если вы хотите сохранить пустую строку:

сохранить пустую строку:

 const mongoose = require('mongoose'); const errorSchema = new mongoose.Schema({ clientId: { type: mongoose.Schema.Types.ObjectId, required: function(){ return typeof this.clientId === 'string' ? false : true }, } }); const Errors = mongoose.model('errors', errorSchema) 

Обновление: Кажется, я неправильно понял ваше намерение. Если вы просто не хотите устанавливать поле clientId в документе, передайте undefined значение в схему, если у вас есть пустая строка. Mongoose не сохранит поле (если оно не требуется, в этом случае Mongoose выдаст ошибку)

исключить пустое строковое поле из сохраненного документа:

 function errorReason(arg1) { const errorLogs = new ErrorLogs({ clientId: clientId || undefined, // handles '', undefined, null, NaN etc reason: arg1, }); return errorLogs; } errorReason("server error").save(); 

Вы должны использовать код, как показано ниже.

 exports.test = async(req,res) ={amp}gt; { const {clientId} = req.body; // There is a function that makes an object to use repeatedly. function errorReason(arg1) { const errorLogs = new ErrorLogs({ clientId : clientId, // add here clientId for asign clientId to field reason: arg1, }); return errorLogs; } if(!!clientId){ //Here !! means not equal to blank,null,undefine and 0 errorReason("server error").save(); }