在单个响应中返回 mongoose 错误列表
Posted
技术标签:
【中文标题】在单个响应中返回 mongoose 错误列表【英文标题】:Return a list of mongoose error in a single response 【发布时间】:2016-04-13 02:17:44 【问题描述】:我目前正在使用 Node.js、Mongoose 和 Express.js 进行后端开发。这是我尝试使用 mongoose 创建的用户列表。
[
"username" : "abc",
"password" : "123",
"displayname" : "ABC",
"email" : "test@example.com"
,
"username" : "def",
"password" : "123",
"displayname" : "DEF",
"email" : "test2@example.com"
,
"username" : "ghi",
"password" : "123",
"displayname" : "GHI",
"email" : "test@example.com"
]
这就是我目前在后端做的事情。我将用户名字段设置为unique
,如果其中一个用户名已经存在,猫鼬将返回错误。
var lists = req.body;
lists.forEach(function(list)
var user = new User();
user.username = list.username;
user.email = list.email;
user.displayname = list.displayname;
user.password = hashed(list.password);
user.save(function(err, user)
if (err)
console.log(list.username + ' is already registered.');
);
);
res.json(
message: 'Users are successfully created'
);
我正在尝试返回数据库中已存在的用户列表,但我只能通过console.log
而不是响应 json 来创建列表。
abc is already registered.
gef is already registered.
有什么方法可以解决吗?我无法将值保存在 user.save()
中,谢谢。
【问题讨论】:
Find all users 并返回它们。有什么大不了的? 【参考方案1】:使用内置的 Promise 支持而不是回调,这对于 Promise.all
来说变得微不足道:
Promise.all(lists.map(list => // .all waits for an array of promises.
var user = new User(); // we `.map` which transforms every element of the array
user.username = list.username;
user.email = list.email;
user.displayname = list.displayname;
user.password = hashed(list.password);
return user.save().then(x => null,e => `$list.username already reistered`);
).then(results => // results of all save promises
const errors = results.filter(Boolean); // we mapped successes to null in the `then`
res.json(errors); // return all the errors
);
【讨论】:
以上是关于在单个响应中返回 mongoose 错误列表的主要内容,如果未能解决你的问题,请参考以下文章
在 Mongoose 中使用 populate() 返回已保存项目的列表