奇怪的error “CastError: Cast to String failed for value”
发布于 3 年前 作者 s3293418 3351 次浏览 来自 问答

设计api的时候遇到了一个奇怪的错误 代码如下:

	const mongoose = require('mongoose');
  	const Schema = mongoose.Schema;
  
  	const CategorySchema = new Schema({
		store : {type: String, required: true, unique: true},
		categories : [{
	 		parent : String,
	  		name : String,
		}],
  	}, {
		timestamps: false,
  	});
  	CategorySchema.index({store: 1});
  	module.exports = mongoose.model('Category', CategorySchema);

建模好了之后储存没问题,但是查询的时候就出现了如下错误

	(node:15444) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ValidationError: CastError: Cast to String failed for value "{ _id: 58dd019b1a06731b0990b878,
  	store: 'OZ-Mobile-trader',
  	categories: [],
  	__v: 0 }" at path "store"

查询语句如下:

	Category.findOne({store: 'OZ-Mobile-trader'}).exec().then(result => {
		console.log(result);
		return res.status(200).json({'message': result});
	}, err => next(err));

如果把‘OZ-Mobile-trader’换成数据库里没有的,就没有error,直接输出null,但是只要查询有的或者查询所有数据,result就输出不出来,直接出来上面的error message. 我也有建相似的数据模型,别的都没问题,只有这个不好用,希望有大神可以棒棒忙~ 谢谢大家

2 回复

原因是没有处理 Promise 的 rejection,试试下面的代码

 Category.findOne({store: 'OZ-Mobile-trader'}).exec()
    .then(result => {
	    console.log(result);
	    return res.status(200).json({'message': result});
    })
    .catch(err => next(err));

@jpuncle 没用…应该不是那个原因,这个error我搜索过,就是cache不到,主要是后面那个CastError,不明白是什么原因造成的

回到顶部