thắc mắc [Web dev] controller data logic

  • Người tạo chủ đề Người tạo chủ đề tiengdonhoarira
  • Ngày bắt đầu Ngày bắt đầu

tiengdonhoarira

Senior Member
Mọi người dùng controller thì khi data input vào controller có kiểm tra DTO và chỉ save data trong DTO hay save toàn bộ data dù không được định nghĩa trong DTO

Ví dụ

class TestDTO {
testAttribute: string
}

input data to controller
data = {
testAttribute: "meomeo",
otherAttribute: "muamua"
}

thì vô controller, sau khi validate ok thì :
1. chọn thông tin và lưu thông tin đó. từ data lấy testAttribute và lưu thông tin này thôi
2. lưu cả data vô

Cái 1. lưu chỉ thông tin cụ thề thì an toàn
Cái 2. lưu hết, thì tương lai khi dữ liệu thay đổi, tức là dữ liệu mới, mà cần lắp hệ thống cũ vô, thì vẫn hoạt động. và sau khi sửa lỗi, lắp hệ thống mới lên, thì không bị mất dữ liệu

Mọi người dùng cách nào. Mình dùng cách 1, nhưng sau lần cần phải cho hệ thống cũ chạy, rồi nó chỉ chọn dữ liệu, và khi lưu thì cả object bị thu nhỏ lại còn những dữ liệu cũ, thì khá oải. migration thì không chạy được, vì phải thay đổi infrastructure về deploy

Mà dùng cái cách 2, thì cái gì ở data cũng lưu vô, thấy lấn cấn. Nhưng api không public, nên ... chắc vẫn được.
 
Mọi người dùng controller thì khi data input vào controller có kiểm tra DTO và chỉ save data trong DTO hay save toàn bộ data dù không được định nghĩa trong DTO

Ví dụ

class TestDTO {
testAttribute: string
}

input data to controller
data = {
testAttribute: "meomeo",
otherAttribute: "muamua"
}

thì vô controller, sau khi validate ok thì :
1. chọn thông tin và lưu thông tin đó. từ data lấy testAttribute và lưu thông tin này thôi
2. lưu cả data vô

Cái 1. lưu chỉ thông tin cụ thề thì an toàn
Cái 2. lưu hết, thì tương lai khi dữ liệu thay đổi, tức là dữ liệu mới, mà cần lắp hệ thống cũ vô, thì vẫn hoạt động. và sau khi sửa lỗi, lắp hệ thống mới lên, thì không bị mất dữ liệu

Mọi người dùng cách nào. Mình dùng cách 1, nhưng sau lần cần phải cho hệ thống cũ chạy, rồi nó chỉ chọn dữ liệu, và khi lưu thì cả object bị thu nhỏ lại còn những dữ liệu cũ, thì khá oải. migration thì không chạy được, vì phải thay đổi infrastructure về deploy

Mà dùng cái cách 2, thì cái gì ở data cũng lưu vô, thấy lấn cấn. Nhưng api không public, nên ... chắc vẫn được.
Làm bằng framework/ngôn ngữ nào? Ko định nghĩa trong dto thì validate nó sẽ ignore hoặc throw luôn rồi chứ lấy đâu ra mà lưu?
1BW9Wj4.png
 
Typical JS and MongoDB

Chỉ lưu những thằng trong DTO thôi. Lý do DTO ra đời là để định nghĩa những thằng nào cần sử dụng. Những thằng ko đc định nghĩa trong DTO có nghĩa là nó chẳng có giá trị gì, lưu vào chỉ tốn tài nguyên.

Chẳng qua thằng JS nó cho truyền lung tung vào thì mới sinh ra cái vụ thừa thuộc tính khi truyền vào. Lại thêm cả bố MongoDB cũng cho lưu cả các field ko đc định nghĩa nữa tốn tài nguyên vl (có config để bật tắt cái này).

Lưu lung tung như vậy thậm chí còn có thể có rủi ro bảo mật. Ví dụ API của mình làm đứng giữa làm trung gian để forward request xuống 1 service khác. Trong request body có 1 phần dữ liệu mình được phép lưu và 1 phần dữ liệu forward sang service kia thì ko đc phép lưu. Nếu ko check cẩn thận mà cứ lưu hết vào thì vô tình mình lại lưu thêm thông tin nhạy cảm của user
 
Implement DTO sai thôi.

Chứ mấy cái lib js đi qua là nó cắt hết properties không định nghĩa mà, ví dụ Nestjs dùng class-validator
phải đặt cái validationpipe({whitelist:true}) thì mới cắt. nếu không thì chỉ validate cái trong dto, còn lại không validate và cho qua


Mã:
whitelist    boolean    If set to true, validator will strip validated (returned) object of any properties that do not use any validation decorators.
 

Thống kê chủ đề

Ngày tạo
tiengdonhoarira,
Người trả lời cuối
tiengdonhoarira,
Trả lời
8
Lượt xem
1.053
Quay lại
Lên đầu trang