在单个响应中返回 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 承诺返回响应

如何在一个获取请求中返回多个 Mongoose 集合?

在 Mongoose 中使用 populate() 返回已保存项目的列表

mongoose 从集合中获取所有返回一个空列表

Express/Mongoose - 错误:传入的参数必须是 12 个字节的单个字符串

Promisifying Mongoose Connect 中的类型错误