gpt4 book ai didi

node.js - ExpressJS 和 NodeJS 中 Mongoose 响应对象中的排序键

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:48 25 4
gpt4 key购买 nike

我一直在开发自己的小型 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 对象键。 ( Here's a link to the more complicated ordering explanation. ) 这解释了当前的行为。

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

  • 首先,执行您自己的 JSON.stringifyusing a "replacer" to createthe output order that you want :

    const artistString = JSON.stringify(artist, ["realName", "stageName", ...])
    // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
  • 然后,使用 res.json(artistString)(而不是 res.send)发送带有以下内容的 JSON 字符串:正确的 Content-Type header 。 (res.send 会假设你想要内容类型:“text/html”。)

肯定有更复杂的方法,包括创建一个获取键、对键进行排序并返回替换器的函数;或者编写您自己的 .toJSON() 替代 JSON.stringify。您可能需要实现这些方法之一,因为您有嵌套对象; the behavior of the replacer can be a bit wonky in this case 。您也许可以在父级之后立即列出嵌套属性,例如:

["realName", "type", ...]

但是由于某些嵌套属性具有相同的名称,因此这可能适合您,也可能不适合您。在对外部进行字符串化之前,您可能必须对内部进行字符串化(啊!)。

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

关于node.js - ExpressJS 和 NodeJS 中 Mongoose 响应对象中的排序键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51903281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com