Route.post does not work

Mình đang làm 1 đồ án web, mình đang gặp phải 1 error “cannot get /admin/payment/1”.
Đồ án nodejs, mô hình mvc, express nodejs, view engine và handlebars.
Trước tiên mình mô tả sơ web app để mn dễ hình dung. Là web app quản lý căn tin. Phân hệ là admin. Nhân viên chính là admin, sẽ chọn món ăn và thanh toán rồi lưu các xử lý đơn hàng vào database. Đại loại là như vậy. Và mình đang gặp vấn đề ở nút thanh toán. Tức là bước cuối cùng của chuỗi quá trình thanh toán luôn đấy.
Do code khá dài nên mình sẽ trích dẫn phần code liên quan.
file admin.js

route.post('/payment/:htThanhtoan', adminController.payment);

file adminController.js

async payment(req, res) {
       //(update và insert database)
}

file thanhtoan.hbs:

<div class="payment-btn">

                        <a href="/admin/payment/1" id="cash-pay-btn">Pay With Cash</a>

                       

                        <a href="/admin/payment/2" id="online-pay-btn">Pay Online</a>

                    </div>

Giải thích vấn đề: Can not get ‘url’. Nhìn thì có vẻ rất đơn giản nhưng thực sự thì không. Đầu tiên mình cần nhấn mạnh là chỉ bị lỗi phần link, có 1 điều gì đó không đúng giữa lúc gọi href trong thẻ a.
Khi mình đổi thành route.get thì thì hoàn toàn có thể access được link. Cách kt rất đơn giản là mình chỉ cần console.log 1 string bất kì trong hàm payment(file adminController.js) là biết được.
Thứ 2, lỗi không nằm ở set up express setup, đó là do mình đã làm được rất nhiều chức năng rồi, nên không liên quan đến vấn đề setup server.
Thứ 3, có thể một số bạn sẽ thấy http method post nhưng controller lại insert và cả update database, có thể vì thế mà lỗi, nhưng thực ra method post vẫn dùng được cho cả 2, mình đã làm rồi và mình biết. Chỉ là sẽ có disadvantages, những nói chung là vẫn được.
Mình đã tìm kiếm rất nhiều nhưng không thể tìm thấy cách giải quyết.
Mọi người có thể xem code đầy đủ ở github: https://github.com/nhatminh287/nmcnpm.git
Như vậy các cao nhân đã từng trải liệu có thể đưa ra ý kiến để giúp đỡ. Rất cảm ơn.

Server bắt POST request nhưng client dùng <a> là gửi một GET request. Express không tìm thấy controller GET với URL đó thì lỗi là đúng rồi.

Mình không làm nhiều MVC nên không chắc lắm, nhưng gợi ý là dưới client dùng <form method="POST"> để gửi request thay vì dùng <a>.

4 Likes

Cảm ơn bạn rất nhiều, mình đã thử cách của bạn và đã có thể truy cập được link.

Được thì bạn nên gửi solution cách bạn làm như thế nào để mọi người góp ý thêm (và cũng để sau này người khác tham khảo nữa).

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?