Loopbackjs @loopback/rest RestBindings.Http.request返回一个空查询变量

Loopbackjs @loopback/rest RestBindings.Http.request返回一个空查询变量,loopbackjs,v4l2loopback,Loopbackjs,V4l2loopback,我使用Loopback v4包的早期版本已经有相当一段时间了,RestBindings.Http.Request绑定在最近的一次升级(不确定何时发生)之前一直运行良好 我仍然能够获取大多数属性的值,但不能获取查询属性。即使使用最基本的项目,使用默认的ping控制器,query属性仍然是空的。下面是我的代码、我的查询和响应的示例: import { Request, RestBindings, get, ResponseObject } from '@loopback/rest'; import

我使用Loopback v4包的早期版本已经有相当一段时间了,RestBindings.Http.Request绑定在最近的一次升级(不确定何时发生)之前一直运行良好

我仍然能够获取大多数属性的值,但不能获取查询属性。即使使用最基本的项目,使用默认的ping控制器,query属性仍然是空的。下面是我的代码、我的查询和响应的示例:

import { Request, RestBindings, get, ResponseObject } from '@loopback/rest';
import { inject } from '@loopback/context';

export class PingController {
  constructor(@inject(RestBindings.Http.REQUEST) private req: Request) { }

  // Map to `GET /ping`
  @get('/ping')
  ping(): object {
    // Reply with a greeting, the current time, the url, and request headers
    return {
      query: 'Query response: ' + this.req.query.start,
      greeting: 'Hello from LoopBack',
      date: new Date(),
      url: this.req.url,
      headers: Object.assign({}, this.req.headers),
    };
  }
}
Query:localhost:3000/ping?start=2018-08-25&end=2018-09-09&user=larsm

输出:

    {   
   "query": "Query response: undefined",   
   "greeting": "Hello from LoopBack",   
   "date": "2018-11-27T23:21:53.142Z",   
   "url": "/ping?start=2018-08-25&end=2018-09-09&user=larsm",   
   "headers": {
        "host": "localhost:3000",
        "connection": "keep-alive",
        "cache-control": "max-age=0",
        "upgrade-insecure-requests": "1",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36",
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "nb-NO,nb;q=0.9,en-GB;q=0.8,en;q=0.7,no;q=0.6,nn;q=0.5,en-US;q=0.4"   } }

因此,我发现上述问题是由@loopback/rest库中的故意更改引起的,即只处理预定义的查询参数

这意味着您需要在控制器中专门定义它们,例如,如下简单示例:

  @get('/larsm')
  greet(
    @param.query.string('start') start: string,
    @param.query.string('end') end: string,
    @param.query.string('name') name: string,
  ) {
    return 'start: ' + start + ', end: ' + end + ', name: ' + name;
  }
}

由于有几个用例并不总是理想的,我确实向环回团队提出了一个问题,看起来他们已经决定恢复最新的更改。

此问题将在下一版本中解决,请参阅,而此链接可能会回答此问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@爆炸物很好!总的来说,我试图遵循这一建议。然而,在这种情况下,几乎没有什么可以包括在内。拉请求正修复问题中描述的问题,GitHub拉请求具有不可变的URL。关于如何改进我的答案,你有什么更具体的建议吗?