【问题标题】:Filter HTTP Response with Express使用 Express 过滤 HTTP 响应
【发布时间】:2015-03-21 23:27:40
【问题描述】:

我正在使用 express 构建一个简单的投票应用程序。我的数据如下所示:

var responseSchema = new mongoose.Schema({
    responseText: String,
    voters: []

})
module.exports = mongoose.model('Responses', responseSchema);

var pollsSchema = new mongoose.Schema({
    question: String,
    responses: [responseSchema],
})

基本上,在我的路由中,我从路由参数中获取 ID,并返回一个包含来自适当轮询的数据的对象。但是,该对象还包含一个“投票者”数组,它是为每个可能的响应投票的 SessionID 列表。我不希望这成为响应的一部分。

我基本上想返回所有内容,除了“选民”数组。如何“过滤”我的 http 响应,使其包含除选民之外的所有内容?

【问题讨论】:

    标签: javascript json angularjs http express


    【解决方案1】:

    如果您有一些包含voters 数组的数据结构,并且您只想删除该数组,则可以使用delete obj.voters 从返回的对象中删除该属性。

    所以,如果你有这样的对象:

    var obj = {
        someField: someValue,
        someOtherField: someOtherValue,
        voters: [...]
    }
    

    您可以使用以下方法从中删除 voters 属性:

    delete obj.voters;
    

    仅供参考,如果您将此数据库结果转换为 JSON 并从 Express 路由返回,那么另一种方法是为实际的 http 响应构造一个新对象,并仅复制数据库查询结果对象中的属性你想参与其中。这也可能涉及一个循环,但这会使您的 http 响应成为一个更刻意构建的对象,而不是数据库中发生的确切内容。它将两者解耦。如果您向数据库添加一个新字段,它不会出现在您的路由的 JSON 中,除非您有意识地更改您的路由以包含它。因此,默认情况下,路由仅返回您明确使其返回的字段,而不是默认返回数据库查询结果中的所有内容。

    【讨论】:

    • 感谢您的回复!所以,基本上我需要编写一个循环来遍历“响应”中的每个响应并删除 response.voters 数组?我只是觉得应该有更好的方法来做到这一点。
    • @JamesMyers - 是的,这将是一种方法(应该只有几行代码)。还有一些库具有执行属性过滤代码的功能*您只是将循环卸载到实用程序功能)。我能想到的唯一另一种方法是对 Mongoose 进行不同的配置,这样你就可以在没有选民信息的情况下获得你想要的数据——我不知道这是否可以通过纯粹更改查询来实现,或者你是否愿意必须改变它的存储方式,因为我不是 Mongoose 人。
    • @JamesMyers - 仅供参考,如果您将此数据库结果转换为 JSON 并从 Express 路由返回,那么另一种方法是为实际的 http 响应构造一个新对象并仅复制您希望在其中的数据库查询结果对象的属性。这可能还涉及一个循环,但这会使您的 http 响应成为一个更刻意构建的对象,而不是数据库中发生的确切内容。如果您向数据库中添加一个新字段,除非您有意识地更改您的路由以包含它,否则它不会出现在您路由的 JSON 中。
    • 谢谢。我想我更喜欢你的第二个回答。我会同意的。
    • @JamesMyers - 我在回答中添加了第二个回复。
    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    相关资源
    最近更新 更多