Trong quá trình phát triển với Sails.js, tôi cần bắt tất cả các request đến website của mình dưới dạng http://how.vndemy.com/paramName thì đều trả về cho client 1 view, ví dụ là: userView và lấy được tham số paramName để xử lý ở phía client.

Như vậy, trong file cấu hình ./config/routes.js sẽ được định nghĩa như sau:

  '/*': {
    view: 'userView'
  }

Ồ! Như vậy là nó đáp ứng được yêu cầu trên?? Nhưng xảy ra 1 vấn đề là các resource tĩnh như file ảnh, css, javascript, hoặc các API có địa chỉ http://how.vndemy.com/api/user/1 đều bị ngắt và trả về view userView. Rõ ràng đây là 1 điều ta không mong đợi rồi!

Vậy, yêu cầu mới của ta là các yêu cầu resouce tĩnh hoặc API thì phải bỏ qua. Trường hợp khác thì trả về view mặc định cho client.

Sử dụng cấu hình Sails.js cung cấp

Trong sails.js phiên bản v0.10.5 hỗ trợ ta các tùy chọn để bỏ qua resource tĩnh và API với định nghĩa như sau:

  '/*': {
    view: 'userView',
    skipAssets: true,
    skipRegex: /^\/api\/.*$/
  }

Lập trình xử lý trong controller

Một cách khác au-tô-mát-tay là tạo ra Controller quản lý và trả về view tương ứng, và thêm một đoạn mã nguồn bỏ qua các API, URL có chứa dấu chấm .

// api/controllers/UserController.js
module.exports = {
   index: function(req, res, next) {
      if (req.path.match(/\..*/g) || req.path.match(/^\/api\/.*$/)) {
         return next();
      }
      return res.view('userView');
   }
}

Và trong ./config/routes.js

'/*': 'UserController.index'

Hi vọng, giúp được các bạn gặp vấn đề dư trên! 🙂
Chúc anh e thành công!!!

About The Author