routes trong express js



  • trong express khi mình dùng

    app.use(express.static(path.join(__dirname, 'public')));
    app .get("/register", function (req, res) {
    res.render('register');
    })

    trong file register.pug có gọi 1 đường dẫn css như "images/icon.png" (images nằm trong thư mục public) thì nó sẽ hiểu là "localhost:3000/images/icon.png" cái này hiển thị đúng ý mình muốn.

    Tuy nhiên khi mình dùng
    app .get("/user/register", function (req, res) {
    res.render('register');
    })
    thì đường dẫn nó sẽ trở thành "localhost:3000/user/images/icon.png" => lỗi . mình muốn sử dụng cách dưới mà vẫn hiển thị đúng như trên ( "localhost:3000/images/icon.png") thì phải làm sao? Các bác chỉ giáo? Mình tìm khá nhiều nhưng không thấy ai giải quyết vấn đề này.



  • @NguyenQuan Cái này là html mà
    Lên https://www.w3schools.com/ học lại ngay bạn


  • Global Moderator

    @NguyenQuan chỉ cần phân biệt đường dẫn tương đối, tuyệt đối là được. bạn thiết kế file register.pug link tới đường dẫn "/images/icon.png" là được.

    Như trên là sử dụng đường dẫn tuyệt đối!



  • This post is deleted!


  • @Vũ vấn đề ở đây là cái icon đó mình dùng cho cả 2 trang.
    VD:
    //default.pug
    script(type="text/javascript", src='js/lodash/lodash.js')

    //login.pug
    extends default

    //register.pug
    extends default

    //login và register dùng chung 1 thằng default.pug

    //route login
    app.get("/login", function (req, res) {
    res.render('login');
    })
    //kết quả ra đúng đường dẫn localhost:3000/js/lodash/lodash.js

    //route register
    app.get("/user/register", function (req, res) {
    res.render('register');
    })
    //kết quả lỗi đường dẫn localhost:3000/user/js/lodash/lodash.js do đường dẫn trong default.pug là đường dẫn tương đối.

    Mình nghĩ có 2 cách giải quyết đó là không sử dụng /user/register, hoặc dùng đường dẫn tuyệt đối. Tuy nhiên mình muốn tìm cách tốt hơn cả 2 cách trên. Bác có cao kiến gì khác ko?



  • @NguyenQuan

    script(type="text/javascript", src='js/lodash/lodash.js')
    

    bạn thay bằng

    script(type="text/javascript", src='/js/lodash/lodash.js')
    

    Cái đầu tiên nó sẽ tính từ url ở trên thanh trình duyệt của bạn
    Nó bao gồm domain+ path không tính query string nhé

    Cái thứ 2 nó sẽ tính từ cái domain của bạn đó
    Tức là khi bạn đặt cái lệnh trời đánh dưới này

    app.use(express.static(__dirname + '/public'));
    

    Hiểu nôm na là vậy.
    Đôi khi 1 dấu chấm dấu phẩy cũng quyết định cuộc đời :)
    Đã theo cái nghiệp coder thì cố hiểu những cái mà chẳng ai hiểu bạn nhé


  • Global Moderator

    @NguyenQuan cách nào cũng có điểm lợi của nó. 1 phương án khác bạn có thể dùng đường dẫn tương đối kết hợp block trong pug trong phần head của layout default. Sau đó sẽ chỉ định đường dẫn cơ sở mặc định ở mỗi trang extends. Cách này bạn tham khảo thôi nhé, mình ko recommend.

    //- default.pug
    html
      head
        title My Site - #{title}
        block scripts
          script(src='js/lodash/lodash.js')
        block head
      body
        block content
        block foot
          #footer
            p some footer content
    

    Trong các file extends layout thì chỉ định đường dẫn tương đối với mỗi trang, ví dụ:

    //- login.pug
    extends defaults.pug
    
    block head
      base(href="/", target="_blank")
    
    block content
      h1= title
    
    //- user/register.pug
    extends defaults.pug
    
    block head
      base(href="/", target="_blank")
    
    block content
      h1= title
    


  • @Khoa-Lê-Duy Cảm ơn bạn nhiều, mình sẽ nhận lời khuyên của bạn :).


Log in to reply