## Request body
Đầu tiên thì bạn cần chắc chắn là đã install `BodyParser`
Nếu chưa install thì có thể cài đặt nhanh với các hướng dẫn bên dưới:
> adonis install @adonisjs/bodyparser
> Sau đó ở file `start/app.js`
const providers = [
'@adonisjs/bodyparser/providers/BodyParserProvider',
....
]
> Cuối cùng thêm vào ở start/kernel.js
const globalMiddleware = [
'Adonis/Middleware/BodyParser',
...
]
1. Body methods
- lấy tất cả các params gửi đến (GET + POST)
> const all = request.all()
- query params data:
> const query = request.get()
- request body data:
> const body = request.post()
- raw body data as a string:
> const raw = request.raw()
- lọc dữ liệu với only
> const data = request.only(['username', 'email', 'age'])
- lấy tất cả ngoại trừ một số key đặc biệt
> const data = request.except(['csrf_token', 'submit'])
- lấy giá trị của một key
> const drink = request.input('drink')
> const drink = request.input('drink', 'coffee') // with default value
## Request collection
Một số trường hợp cần xử lý array của dữ liệu của các cặp key/value
<form method="POST" action="/users">
<input type="text" name="username[0]" />
<input type="text" name="age[0]" />
<input type="text" name="username[1]" />
<input type="text" name="age[1]" />
</form>
- Với các thông thường
const users = request.only(['username', 'age']) => { username: ['virk', 'nikk'], age: [26, 25] }
- Sử dụng với collect
<!-->
const users = request.collect(['username', 'age'])
==> [{ username: 'virk', age: 26 }, { username: 'nikk', age: 25 }]
// save to db
await User.createMany(users)
-->
## Lấy các giá trị từ Header
1. Lấy tất cả header data
> const headers = request.headers()
2. Lấy theo key
<!-->
var auth = request.header('authorization')
// case-insensitive
var auth = request.header('Authorization')
// with default value
const other = request.header('some-other-header', 'default')
-->
## Lấy các giá trị cookie từ request
1. Lấy tất cả
> const cookies = request.cookies()
2. Lấy theo key
<!-->
const cartTotal = request.cookie('cart_total')
// with default value
const cartTotal = request.cookie('cart_total', 0)
-->
3. Lấy tất cả cookie thô
> const plainCookies = request.plainCookies()
4. Lấy giá trị thô theo key
<!-->
const jsCookie = request.plainCookie('cart_total')
// with default value
const jsCookie = request.plainCookie('cart_total', 0)
-->
## Phân tích request để trả về đúng dữ liệu mà request mong muốn
1. accepts
Đọc giá trị `Accept` ở header gửi đến để quyết định cái gì sẽ trả về
<!-->
const bestFormat = request.accepts(['json', 'html'])
if (bestFormat === 'json') {
return response.json(users)
}
return view.render('users.list', { users })
-->
2. language
Một số trường hợp thì tùy vào giá trị `Accept-Language` ở header để trả về nội dung có ngôn ngữ phù hợp
> const language = request.language(['en', 'fr'])
## Tổng hợp các Request methods
1. current request url
> const url = request.url()
2. full current request url with query strings
> const url = request.originalUrl()
3. get HTTP request method
> const method = request.method()
4. lấy ra method thực sự để xử lý request nếu có chỉ định khác với route đã được chỉ định
> const method = request.intended()
5. Lấy ip
> const ip = request.ip()
6. Lấy tất cả ips có thể liên quan
> const ips = request.ips()
7. Lấy ra subdomains
> const subdomains = request.subdomains()
8. Kiểm tra request type có phải là X-Requested-With header (Ajax)
if (request.ajax()) {
// do something
}
9. Kiểm tra request type có phải là pjax (phiên bản tiến hóa của ajax)
if (request.pjax()) {
// do something
}
10. lấy thông tin hostname
> const hostname = request.hostname()
11. lấy thông tin protocal (http hay https)
> const protocol = request.protocol()
12. kiểm tra route config của request
> request.match(['posts/:id'])
13. kiểm tra request có kèm theo post body hay không?
if (request.hasBody()) {
// do something
}
14. kiểm tra content type của request
Ví dụ: content-type is `application/json`
request.is(['json', 'html']) // result: json
request.is(['application/*']) // result: application/json
## HTTP Method spoofing
HTML forms chỉ có thể submit lên GET hoặc POST request.
Với trường hợp chúng ta muốn HTML forms cũng có thể submit lên PUT hoặc DELETE?
File start/routes.js:
Route.put('users', 'UserController.update')
Form:
<form method="POST" action="/users?_method=PUT">
File config/app.js
allowMethodSpoofing = true
## Viết thêm các phương thức(methods) cho Request
Bạn có thể tự viết thêm các phương thức cho Request, sử dụng macros.
Và cần đăng ký nó ở providers hoặc ignitor hooks.
Đọc thêm: https://adonisjs.com/docs/4.1/extending-adonisjs
<!-->
const Request = use('Adonis/Src/Request')
Request.macro('cartValue', function () {
return this.cookie('cartValue', 0)
})
-->
Không có nhận xét nào:
Đăng nhận xét