Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该如何向膝关节炎后端发送一个GET请求,返回条件结果?_Javascript_Node.js_Rethinkdb_Koa - Fatal编程技术网

Javascript 我应该如何向膝关节炎后端发送一个GET请求,返回条件结果?

Javascript 我应该如何向膝关节炎后端发送一个GET请求,返回条件结果?,javascript,node.js,rethinkdb,koa,Javascript,Node.js,Rethinkdb,Koa,到目前为止,我有这个。它很管用,但我忍不住想知道是否有不那么刺耳的东西 获取请求: http://localhost:3100/api/things?matches=%7B%22name%22%3A%22asdf%22%7D 解码:matches={“name”:“asdf”}--我基本上将数据对象作为GET请求,将键作为查询字符串参数名,并将JSON.stringify值作为查询字符串值 这是可行的……但我觉得也许我可以用一个端点使它更平滑,比如: GEThttp://localhost:31

到目前为止,我有这个。它很管用,但我忍不住想知道是否有不那么刺耳的东西

获取请求:

http://localhost:3100/api/things?matches=%7B%22name%22%3A%22asdf%22%7D

解码:
matches={“name”:“asdf”}
--我基本上将数据对象作为GET请求,将键作为查询字符串参数名,并将
JSON.stringify
值作为查询字符串值

这是可行的……但我觉得也许我可以用一个端点使它更平滑,比如:

GEThttp://localhost:3100/api/things/match/:attr/:value
——但这是非常有限的,因为我只能有一个条件。而通过上面的整个对象,我可以匹配多个属性

在膝关节炎方面,它不是多余的额外代码(我使用的是TimeReTimkDB):

如果没有查询字符串,那么它只返回所有结果


我走对了吗?

我相信这是正确的方法。猫鼬也使用这种方法。甚至可以再进一步。 示例url如下所示:

/api/users?条件={“name”:“john”,“city”:“London”}&limit=10&skip=1&sort=-zipcode

可通过以下代码进行处理:


我希望有一个类似的库,用于ReTimkDB。

我不知道很多膝关节炎,只是对你选择端点的评论:如果你使用<代码> /TABR//:Value<代码>,你不会通过这样的多个查询项:<代码>…/Mats/Noth/AsDF/Huff/Real/Prp/值…< /C>??似乎。。尴尬。将它们解析为查询字符串不是更好吗
./matches?name=asdf&color=red&prop=val
使用查询字符串方法的想法是我可以传递多个筛选对象,比如
matches={name:'asdf'}&where={age:18}
等。看起来,尽管有黑客行为,但您的解决方案可能是最灵活的。您只是想在模型上有一个HTTP层,还是接口会受到更大的限制?HTTP和潜在的套接字。好的,但请考虑是否需要进一步指定name属性。假设name实际上是一个对象,它有full、nick等属性。如何开始在具有属性的资源中指定较低层次结构链,并在其中一个属性中指定它的属性,等等,以设置为标准。我可以看到它只在您请求的资源的同一层次上工作,所以我看不到它处理更复杂的情况。您不能只使用点表示法吗?(见附件)
  /**
   * list
   * list all things
   * @param next
   */
  ctrl.list = function *(next){
    var matches = this.request.query.matches && JSON.parse(this.request.query.matches);

    if ( matches ) {
      var result = yield Thing.orderBy({index: "createdAt"}).filter(function(doc){
        return doc('name').match(matches.name);
      });
    } else {
      var result = yield Thing.orderBy({index: "createdAt"});
    }

    this.body = result;

    yield next;
  };
findAll: function*(next) {
  yield next;
  var error, result;
  try {
    var conditions = {};
    var query = this.request.query;
    if (query.conditions) {
      conditions = JSON.parse(query.conditions);
    }
    var builder = model.find(conditions);
    ['limit', 'skip', 'sort'].forEach(function(key){
      if (query[key]) {
        builder[key](query[key]);
      }
    })
    result = yield builder.exec();
    return this.body = result;
  } catch (_error) {
    error = _error;
    return this.body = error;
  }
}