RESTAPI:如何搜索其他属性

RESTAPI:如何搜索其他属性,api,node.js,rest,express,Api,Node.js,Rest,Express,我使用node.js作为RESTAPI。 有以下可用操作: /联系人,获取,查找所有联系人 /联系人,发布,创建新联系人 /contacts/:id,GET,按其id显示或获取特定联系人 /contacts/:id、PUT、更新特定联系人 /联系人/:id,DELETE,删除特定联系人 现在搜索、查询用户的逻辑路线是什么? 我应该把这个放到3号桌上吗。路线还是我应该创建一条额外的路线?有趣的问题。这是我已经讨论过好几次的话题 我不认为有一个明确的答案,或者可能有,我只是不知道或者不同意。我认为您

我使用node.js作为RESTAPI。 有以下可用操作:

  • /联系人,获取,查找所有联系人
  • /联系人,发布,创建新联系人
  • /contacts/:id,GET,按其id显示或获取特定联系人
  • /contacts/:id、PUT、更新特定联系人
  • /联系人/:id,DELETE,删除特定联系人
  • 现在搜索、查询用户的逻辑路线是什么?
    我应该把这个放到3号桌上吗。路线还是我应该创建一条额外的路线?

    有趣的问题。这是我已经讨论过好几次的话题


    我不认为有一个明确的答案,或者可能有,我只是不知道或者不同意。我认为您应该添加一个新的路由:/contacts/\u search在联系人列表上执行操作,在本例中为搜索。然后,明确并定义您要做的事情

    我相信你会对这个问题有很多不同的看法。就个人而言,我认为“搜索”是对“所有联系人”的过滤,提供:

    GET/contacts?filter=您的\u filter\u语句

    您可能已经在GET/contacts上设置了过滤参数,以允许分页与filter语句配合使用

    编辑: 使用此选项分析查询字符串:

    var url = require('url');
    
    在处理程序中(“请求”是您的nodejs http请求对象):


    GET/contacts
    查找所有联系人。您需要所有联系人的子集。URI中的哪个分隔符表示子集?不是“?”;这是不分等级的。“/”字符用于分隔分层路径段。因此,对于联系人的子集,请尝试使用URI,如
    /contacts/like/dave/
    /contacts/by\u name/susan/


    按路径段划分数据子集的概念不仅适用于集合,而且适用范围更广。您的整个站点是一个集合,每个顶级路径段定义了其中的一个子集:
    http://yoursite.example/contacts
    http://yoursite.example/
    。它的适用范围也更窄:
    /contacts/:id
    /contacts
    的一个子集,
    /contacts/:id/firstname
    /contacts/:id
    的一个子集嗨,你能给我一个示例代码吗?我在express/nodeOk中不常见url查询,我将filterStatement放入mongoose find表达式中。那么我现在如何使用url进行过滤呢。我尝试了GET/contacts?filter=username,但这根本无法过滤,我如何定义多个过滤器?至于Mongoose/MongoDB find语法,我建议您查看Mongoose文档:和MongoDB查询:。我认为这是一个额外搜索引擎的好方法。但是,在表演过程中,公正的提问更符合逻辑。我的印象是,这正是你所感兴趣的。但是lindstromhenrik也有一个很好的方法
    var parsedUrl = url.parse(request.url, true);
    var filterStatement = parsedUrl.query.filter;