Trong các bài học vừa qua, ta đã biết cách route cho rất nhiều trang HTML cho các chức năng như liệt kê các user, tìm kiếm user, hiển thị thông tin chi tiết user, tạo mới user,…
Điều mình muốn nói đến là, tất cả các dòng lệnh route này mình đều đặt trên một file app.js . Vậy nó có tốt???
Để trả lời câu hỏi này, ta hãy dựa vào thực tế một chút: Trong các dự án, ta không chỉ đơn giản là quản lý về user, mà còn có hàng tá, hàng tấn thứ khác. Vi dụ như một trang web bán hàng như Thế giới di động, hay lazada, shopee,… ta sẽ phải quản lý thêm các thông tin về các đối tượng như : Sản phẩm, Bình luận, Đơn hàng, Phân loại , vân vân và mây mây.
Do đó, ta sẽ phải có cực kỳ nhiều dòng lệnh route cho mỗi đối tượng. Việc đặt tất cá các dòng lệnh này trong một file app.js như thế này thì chương trình vẫn chạy ổn, nhưng việc sửa chửa, nâng cấp và bảo trì sẽ cực kỳ khó khăn. Hãy tưởng tượng file này có thể lên đến cả ngàn dòng thì tìm thôi cũng đủ mệt
Vậy, giải pháp đặt ra là gì? Đó là ta sẽ phân chia các route này theo từng đối tượng. Mỗi đối tượng có một file route riêng, như vậy, việc bảo trì sẽ dễ dàng hơn rất nhiều
Ta sẽ bắt tay vào thực hành việc này với đối tượng user mà ta đã có
Tạo một folder mới có tên là routes trong thư mục nodeapp . Đây sẽ là thư mục chứa các file route của chúng ta
1 2 3 | |--nodeapp |----routes |
Tiếp theo, tạo một file user.js để quản lý các route liên quan đến đối tượng user
1 2 | <span class="token comment">// route for user here</span> |
Để express có thể hiển được, ta sẽ tạo mới một đối tượng route. Express cung cấp cho ta phương thức Router() để tạo mới một router. Đừng quên require express trước nhé
1 2 3 | <span class="token keyword">const</span> express <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'express'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> user_router <span class="token operator">=</span> express<span class="token punctuation">.</span><span class="token function">Router</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Bây giờ, ta sẽ copy toàn bộ array users và các route liên quan đến user từ file app.js sang file user.js . Sau đó, ta sẽ thay app bằng user_router , đồng thời, xóa đi /users cho tham số đầu tiên của các route (lý do là ta đã quy định đây là route cho user rồi, nên không cần đến /users nữa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <span class="token keyword">const</span> express <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'express'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> user_router <span class="token operator">=</span> express<span class="token punctuation">.</span><span class="token function">Router</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> users <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">"User1"</span><span class="token punctuation">,</span> email<span class="token punctuation">:</span> <span class="token string">"<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>"</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">31</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">"User2"</span><span class="token punctuation">,</span> email<span class="token punctuation">:</span> <span class="token string">"<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>"</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">20</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">"User1"</span><span class="token punctuation">,</span> email<span class="token punctuation">:</span> <span class="token string">"<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>"</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">25</span><span class="token punctuation">}</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">{</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/index'</span><span class="token punctuation">,</span><span class="token punctuation">{</span> users<span class="token punctuation">:</span> users <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/search'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span>res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">var</span> name_search <span class="token operator">=</span> req<span class="token punctuation">.</span>query<span class="token punctuation">.</span>name <span class="token comment">// lấy giá trị của key name trong query parameters gửi lên</span> <span class="token keyword">var</span> age_search <span class="token operator">=</span> req<span class="token punctuation">.</span>query<span class="token punctuation">.</span>age <span class="token comment">// lấy giá trị của key age trong query parameters gửi lên</span> <span class="token keyword">var</span> result <span class="token operator">=</span> users<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>user<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// tìm kiếm chuỗi name_search trong user name. </span> <span class="token comment">// Lưu ý: Chuyển tên về cùng in thường hoặc cùng in hoa để không phân biệt hoa, thường khi tìm kiếm</span> <span class="token keyword">return</span> user<span class="token punctuation">.</span>name<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span>name_search<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!==</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token operator">&&</span> user<span class="token punctuation">.</span>age <span class="token operator">===</span> <span class="token function">parseInt</span><span class="token punctuation">(</span>age_search<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/index'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> users<span class="token punctuation">:</span> result <span class="token comment">// render lại trang users/index với biến users bây giờ chỉ bao gồm các kết quả phù hợp</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/create'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/create'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token function">post</span><span class="token punctuation">(</span><span class="token string">'/create'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> users<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>req<span class="token punctuation">.</span>body<span class="token punctuation">)</span><span class="token punctuation">;</span> res<span class="token punctuation">.</span><span class="token function">redirect</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/:id'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>req<span class="token punctuation">.</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> user <span class="token operator">=</span> users<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>user<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> user<span class="token punctuation">.</span>id <span class="token operator">==</span> <span class="token function">parseInt</span><span class="token punctuation">(</span>req<span class="token punctuation">.</span>params<span class="token punctuation">.</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/show'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> user<span class="token punctuation">:</span> user <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> |
Các phần code còn lại không có gì thay đổi, các bạn có thể so sánh giữa 2 file này nhé
Công đoạn cuối cùng, là ta phải export file user.js này để có thể require nó vào trong file app.js. Vì như mình đã nói ở các bài trước, khi server khởi chạy nó sẽ đọc thông tin từ file app.js. Do đó, ta sẽ phải require file user.js này để server có thể đọc được
Thêm module.exports = user_router vào cuối file user.js
1 2 3 | <span class="token comment">// Exports cho biến user_router</span> module<span class="token punctuation">.</span>exports <span class="token operator">=</span> user_router<span class="token punctuation">;</span> |
Những bạn nào đã học JavaScript rồi thì sẽ biết về module.exports này. Bạn nào chưa rõ thì có thể tham khảo bài viết này nhé: Module exports
Sau khi exports, ta sẽ require vào file app.js
1 2 3 | <span class="token comment">// Require user route</span> <span class="token keyword">const</span> userRoute <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'./routes/user'</span><span class="token punctuation">)</span> |
Sau đó, ta sẽ phải định nghĩa cách dùng route này. Ở đây, ta sẽ định nghĩ các route cho đối tượng user, tức là các đường dẫn bắt đầu bằng ‘/users’ mà ta đã xóa ở trên.
1 2 3 | <span class="token comment">// Dùng userRoute cho tất cả các route bắt đầu bằng '/users'</span> app<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span><span class="token string">'/users'</span><span class="token punctuation">,</span> userRoute<span class="token punctuation">)</span><span class="token punctuation">;</span> |
Vậy là ta đã hoàn tất việc phân chia route cho đối tượng user, xem lại code của 2 file app.js và user.js nhé
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <span class="token keyword">const</span> express <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'express'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Require module express vào project</span> <span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">express</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Tạo một app mới</span> <span class="token keyword">const</span> port <span class="token operator">=</span> <span class="token number">8080</span><span class="token punctuation">;</span> <span class="token comment">// Định nghĩa cổng để chạy ứng dụng NodeJS của bạn trên server</span> <span class="token comment">// Require user route</span> <span class="token keyword">const</span> userRoute <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'./routes/user'</span><span class="token punctuation">)</span> app<span class="token punctuation">.</span><span class="token keyword">set</span><span class="token punctuation">(</span><span class="token string">'views'</span><span class="token punctuation">,</span> <span class="token string">'./views'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Thư mục views nằm cùng cấp với file app.js</span> app<span class="token punctuation">.</span><span class="token keyword">set</span><span class="token punctuation">(</span><span class="token string">'view engine'</span><span class="token punctuation">,</span> <span class="token string">'pug'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Sử dụng pug làm view engine</span> app<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span>express<span class="token punctuation">.</span><span class="token function">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// for parsing application/json</span> app<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span>express<span class="token punctuation">.</span><span class="token function">urlencoded</span><span class="token punctuation">(</span><span class="token punctuation">{</span> extended<span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// for parsing application/x-www-form-urlencoded</span> <span class="token comment">// Dùng userRoute cho tất cả các route bắt đầu bằng '/users'</span> app<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span><span class="token string">'/users'</span><span class="token punctuation">,</span> userRoute<span class="token punctuation">)</span><span class="token punctuation">;</span> app<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">{</span> res<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token string">"<h2>This is my first app</h2>"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> app<span class="token punctuation">.</span><span class="token function">listen</span><span class="token punctuation">(</span>port<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Your app running on port '</span><span class="token operator">+</span> port<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <span class="token keyword">const</span> express <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'express'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> user_router <span class="token operator">=</span> express<span class="token punctuation">.</span><span class="token function">Router</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> users <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">"User1"</span><span class="token punctuation">,</span> email<span class="token punctuation">:</span> <span class="token string">"<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>"</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">31</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">"User2"</span><span class="token punctuation">,</span> email<span class="token punctuation">:</span> <span class="token string">"<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>"</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">20</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> name<span class="token punctuation">:</span> <span class="token string">"User1"</span><span class="token punctuation">,</span> email<span class="token punctuation">:</span> <span class="token string">"<a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a>"</span><span class="token punctuation">,</span> age<span class="token punctuation">:</span> <span class="token number">25</span><span class="token punctuation">}</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">{</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/index'</span><span class="token punctuation">,</span><span class="token punctuation">{</span> users<span class="token punctuation">:</span> users <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/search'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span>res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">var</span> name_search <span class="token operator">=</span> req<span class="token punctuation">.</span>query<span class="token punctuation">.</span>name <span class="token comment">// lấy giá trị của key name trong query parameters gửi lên</span> <span class="token keyword">var</span> age_search <span class="token operator">=</span> req<span class="token punctuation">.</span>query<span class="token punctuation">.</span>age <span class="token comment">// lấy giá trị của key age trong query parameters gửi lên</span> <span class="token keyword">var</span> result <span class="token operator">=</span> users<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>user<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// tìm kiếm chuỗi name_search trong user name. </span> <span class="token comment">// Lưu ý: Chuyển tên về cùng in thường hoặc cùng in hoa để không phân biệt hoa, thường khi tìm kiếm</span> <span class="token keyword">return</span> user<span class="token punctuation">.</span>name<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span>name_search<span class="token punctuation">.</span><span class="token function">toLowerCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!==</span> <span class="token operator">-</span><span class="token number">1</span> <span class="token operator">&&</span> user<span class="token punctuation">.</span>age <span class="token operator">===</span> <span class="token function">parseInt</span><span class="token punctuation">(</span>age_search<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/index'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> users<span class="token punctuation">:</span> result <span class="token comment">// render lại trang users/index với biến users bây giờ chỉ bao gồm các kết quả phù hợp</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/create'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/create'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token function">post</span><span class="token punctuation">(</span><span class="token string">'/create'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> users<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>req<span class="token punctuation">.</span>body<span class="token punctuation">)</span><span class="token punctuation">;</span> res<span class="token punctuation">.</span><span class="token function">redirect</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> user_router<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'/:id'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>req<span class="token punctuation">.</span>params<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> user <span class="token operator">=</span> users<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span> <span class="token punctuation">(</span>user<span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> user<span class="token punctuation">.</span>id <span class="token operator">==</span> <span class="token function">parseInt</span><span class="token punctuation">(</span>req<span class="token punctuation">.</span>params<span class="token punctuation">.</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> res<span class="token punctuation">.</span><span class="token function">render</span><span class="token punctuation">(</span><span class="token string">'users/show'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> user<span class="token punctuation">:</span> user <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// Exports cho biến user_router</span> module<span class="token punctuation">.</span>exports <span class="token operator">=</span> user_router<span class="token punctuation">;</span> |
Bây giờ, các bạn hãy khởi động lại server và test lai các chức năng nhé. Nó sẽ hoạt động không khác gì các bài trước. Tuy nhiên, một lần nữa ta đã làm cho code rõ ràng, dễ bảo trì và sửa chửa hơn rất nhiều
Bài học này có phần phức tạp hơn các bài học trước, hy vọng các bạn sẽ làm được. Thử thách cho các bạn để thực hành cho bài học này là: Hãy tạo các route cho đối tượng post bao gồm các thông tin là title và content, các route này tương tự các route về user . Nếu có thắc mắc gì hãy comment để cùng nhau giải đáp nhé!!!
Bài sau chúng ta sẽ tìm hiểu về controller . Hẹn gặp lại các bạn