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
-
@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àyapp.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é
-
@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ầnhead
của layoutdefault
. Sau đó sẽ chỉ định đường dẫn cơ sở mặc định ở mỗi trangextends
. 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 :).