Получение ошибки «request.all не является функцией», а request.param и request.params больше не являются функциями в AdonisJS. - PullRequest
0 голосов
/ 17 июня 2020

Я хочу получить параметры запроса из маршрута. В частности, в моем случае я хочу, чтобы эти параметры отправлялись функции в связанном контроллере.

Из более старой документации похоже, что раньше были функции для request.param() и request.params(), но я не могу найти те же функции в новой документации .

При попытке использовать эти функции я получаю что-то вроде

request.params is not a function

Обратите внимание, что «более новая» документация, которую я процитировал, - это 4.0, а не 4.1 (это то, что я использую), но при попытке использовать такие функции, как request.all() из документации 4.1, я получаю похожие ошибки «не является функцией». Я не уверен, что делаю ошибку или эта документация устарела.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020
class UserController {
    async invitation({ view, request, params }) {

        // Pass invite code to the view so it can be injected into a form
        // (this way invite codes can be built into links, or inserted manually)
        return view.render('account.invitation', { invite_code: params.invite_code })
    }
}
0 голосов
/ 17 июня 2020

После разбиения объектов с помощью некоторых отладочных операторов, ie. Object.keys(request), за которым следует Object.keys(request.params), похоже, что есть член "params", но это объект / массив, а не функция. Это значение может быть доступно через request.params.the_parameter или request.params['the_parameter'].

Результирующий код для доступа к параметрам запроса из контроллера выглядит следующим образом (я создаю систему приглашения пользователей):

routes . js

// a "?" is inserted after the invite_code parameter to indicate that it is optional
Route.get('/invitation/:invite_code?', 'UserController.invitation').as('invitation')

MyController. js

class UserController {
    async invitation({ view, request }) {

        // Pass invite code to the view so it can be injected into a form
        // (this way invite codes can be built into links, or inserted manually)
        return view.render('account.invitation', { invite_code: request.params.invite_code })
    }
}
...