Node.js 在ExpressJS和NodeJS中对Mongoose响应对象中的键进行排序

Node.js 在ExpressJS和NodeJS中对Mongoose响应对象中的键进行排序,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我一直在开发自己的小API,到目前为止,一切都非常好,我只是有一个小问题,我似乎找不到答案 我在mongoose中定义了这样的模式: const ArtistSchema = new Schema({ stageName: { type: String, unique: true, required: true, minlength: 3, maxlength: 255 }, realName: { type: String, unique

我一直在开发自己的小API,到目前为止,一切都非常好,我只是有一个小问题,我似乎找不到答案

我在mongoose中定义了这样的模式:

const ArtistSchema = new Schema({
stageName: {
    type: String,
    unique: true,
    required: true,
    minlength: 3,
    maxlength: 255
},
realName: {
    type: String,
    unique: true,
    required: true,
    minlength: 5,
    maxlength: 255
},
birthday: {
    type: Date,
    required: true
},
debutDate: {
    type: Date,
    required: true
},
company: {
    type: String,
    minlength: 5,
    maxlength: 255,
    required: function () {
        return this.active;
    }
},
active: {
    type: Boolean,
    default: true
},
music: [AlbumSchema],
createdAt: {
    type: Date,
    default: Date.now
}
});
我可以在数据库中创建一个条目,也没有问题。我在app.post上使用此功能

    create(req, res, next) {
    const artistProps = req.body;
        Artist.create(artistProps)
            .then(artist => res.send(artist))
            .catch(next);
   },
这很好,但是res.send(artist))实际上返回的对象没有键顺序。。或者以一种我无法识别的模式。我希望响应与我在模式中定义的排序相同,因为现在它返回它:

活动、舞台名称、真实名称、标签、音乐、生日

而应该是舞台剧、真名、生日、首映日等


我希望有人能帮我。我知道我可以用sort对特定键的值进行排序(如按字母顺序排序stageName),但我真的找不到任何键。

Express'
res.send
方法识别
artist
是一个对象,并在发送之前调用
JSON.stringify
将对象转换为JSON字符串。简化一点,
JSON.stringify
方法按创建顺序迭代
artist
对象键。()这解释了当前的行为

其他人可能会附和他们自己的建议,建议你如何实现自己的目标,但这里有一个简单的建议可以先尝试:

  • 首先,让您的拥有
    JSON.stringify
    ,:

  • 然后,使用
    res.json(artistString)
    ,而不是
    res.send
    ,将json字符串与 更正
    内容类型
    标题。(
    res.send
    将假定您需要
    内容类型:“text/html”

当然还有更复杂的方法,包括创建一个获取键、对键进行排序并返回替换的函数;或者编写自己的
.toJSON()
替换
JSON.stringify
。您可能需要实现其中一种方法,因为您有嵌套对象。您可以在父对象之后立即列出嵌套属性,如:

["realName", "type", ...]
但是,由于某些嵌套属性的名称相同,因此这可能适用于您,也可能不适用于您。你可能必须先把内部串起来,然后再把外部串起来(嘎!)

无论如何,希望我的建议能成为第一步。

Ty:)这正是我所希望的。。可悲的是,它只是比你更令人讨厌
["realName", "type", ...]