hiện tại muốn sử dung handlebars không bị lỗi các bạn phải làm như dưới nha, ko là bị lỗi khai báo đấy :V phải ".engine" const hbs = require('express-handlebars'); app.engine('handlebars', hbs.engine());
@huy đoàn app.engine('hbs',handlebars.engine()({ extname:'.hbs' })) đoạn này bạn viết bị sai rồi hay sao ấy, phải như này app.engine('hbs',handlebars.engine({ extname: '.hbs' }) );
Ở express-handlebars mới (v6.0.6) Mọi người có thể làm như sau để không bị lỗi ạ. const hbs = require('express-handlebars') app.engine('handlebars', hbs.engine()) app.set('views', './src/resources/views')
thank a nhiều. e đang xem đi xem lại 3 lần. lần 1 xem qua để biết. lần 2: vừa xem vừa làm, lần 3 : xem lại cho hiểu rõ hơn. lần 4: tự code khi không cần xem. :D
Các bạn sửa giúp mình: Từ: path.join(__dirname, 'resources/views') Sửa thành: path.join(__dirname, 'resources', 'views') method join của đối tượng path có thể nhận nhiều đối số nhé, và nó sẽ tạo path thích hợp tùy vào OS đang chạy Node nhé mọi người. Viết theo cách mới thì chúng ta không cần quan tâm tới là windows hay linux nữa.
cảm ơn anh , cảm ơn anh rất nhiều vì đã tận tâm làm ra những video chất lượng để truyền đạt kiến thức cho sinh viên chúng em , chúc anh và gia đinh luôn mạnh khỏe , hạnh phúc
Các bạn cứ yên tâm xài handlebar, mình đã xài cả ejs,pug, handlebar rồi thấy handlebar sướng nhất, dễ custom nhất, ejs nó hạn chế chỗ layout, pug thì cú pháp ko thuần html nếu viết cho người khác đọc thì ko phải ai cũng hiểu đc ( ví dụ khách hàng ), sau đó mình đã chọn handlebar, handlebar-express chỉ là 1 nhánh của handlebar thôi, handlebar dùng đc cho nhiều framework, các bạn thử gõ handlebar npm sẽ thấy lượng download khủng khiếp hơn hai thằng còn lại nhiều. Nếu bạn nào học Jquery rồi có thể xài Mustache , cũng khá tốt. Riêng mình vẫn chọn handlebar nếu project của mình dùng template engine 🍭
update : bạn nào bị lỗi chỗ handlebars cụ thể Error : The partial header could not be found , thì xoá chỗ app.engine ( chỗ đăng ký name hbs) dán dòng này vào nhé : app.engine('hbs',handlebars.engine({extname : '.hbs', partialsDir: path.join(__dirname, 'resources','views', 'partials')})).
Mn cho mình hỏi h mình dùng react code giao diện thì lm sao để cấu hình router cho nó chạy như kiểu handlebar v . Kiểu đi các trag khác thì nó vẫn còn header ý.
update: ai bị lỗi trang cứ load mãi thì thêm config cho hàm handlebar({ defaultLayout: 'main', extname: 'hbs' }) mình thêm dòng defaultLayout thì fix được lỗi đấy
nếu gặp lỗi "handlebars is not a function " các bạn có thể làm như này: const handlebars = require('express-handlebars') app.engine('handlebars', handlebars.engine({ defaultLayout: 'main' })); app.set('views engine', 'handlebars') app.set('views', path.join(__dirname, 'resources/views'));
chao a va moi nguoi . cho e hoi: ví dụ nếu res.render('home',{userData}) co cach nao de header o partials cung nhan duoc userData khong a . e muon kiem tra neu nguoi dung dang nhap thi se hien thi logout
Xin chào, về cái layout phần chung mình đặt ở file main.hbs tuy nhiên front-end giao diện khác và admin giao diện khác làm thế nào để tách hẳn 2 phần này anh nhỉ
Các bạn gặp lỗi như sau: Error: No default engine was specified and no extension was provided. at new View (E:\BackEnd\Blog ode_modules\express\lib\view.js:61:11) at Function.render (E:\BackEnd\Blog ode_modules\express\lib\application.js:587:12) at ServerResponse.render (E:\BackEnd\Blog ode_modules\express\lib esponse.js:1039:7) at E:\BackEnd\Blog\src\index.js:23:7 at Layer.handle [as handle_request] (E:\BackEnd\Blog ode_modules\express\lib outer\layer.js:95:5) at next (E:\BackEnd\Blog ode_modules\express\lib outer oute.js:144:13) at Route.dispatch (E:\BackEnd\Blog ode_modules\express\lib outer oute.js:114:3) at Layer.handle [as handle_request] (E:\BackEnd\Blog ode_modules\express\lib outer\layer.js:95:5) at E:\BackEnd\Blog ode_modules\express\lib outer\index.js:284:15 at Function.process_params (E:\BackEnd\Blog ode_modules\express\lib outer\index.js:346:12) thì fix như cách này nhé: const handlebars = require("express-handlebars"); const path = require("path"); //Template engine app.engine("handlebars", handlebars.engine()); app.set("view engine", "handlebars"); app.set("views", path.join(__dirname, "resources", "views")); app.get("/", (req, res) => { res.render("home"); });
@@F8VNOfficial em thấy hay ấy chứ, ngay từ đầu đã tổ chức ntn, sau này mọi người tiếp xúc với FW sẽ bớt lạ lẫm. Giá như biết tới anh từ 6 tháng trước thì có lẽ cuộc đời em sẽ bớt khổ :((
Cho em hỏi em làm tới 15:46 nó bị lỗi như sau Error: No default engine was specified and no extension was provided. at new View (E:\BackEnd\Blog ode_modules\express\lib\view.js:61:11) at Function.render (E:\BackEnd\Blog ode_modules\express\lib\application.js:587:12) at ServerResponse.render (E:\BackEnd\Blog ode_modules\express\lib esponse.js:1039:7) at E:\BackEnd\Blog\src\index.js:23:7 at Layer.handle [as handle_request] (E:\BackEnd\Blog ode_modules\express\lib outer\layer.js:95:5) at next (E:\BackEnd\Blog ode_modules\express\lib outer oute.js:144:13) at Route.dispatch (E:\BackEnd\Blog ode_modules\express\lib outer oute.js:114:3) at Layer.handle [as handle_request] (E:\BackEnd\Blog ode_modules\express\lib outer\layer.js:95:5) at E:\BackEnd\Blog ode_modules\express\lib outer\index.js:284:15 at Function.process_params (E:\BackEnd\Blog ode_modules\express\lib outer\index.js:346:12) Không hiện ra 1 dòng Error như anh làm
Anh Sơn Đặng cho em hỏi. với handlebars này mình có cách nào tạo ra nhiều layouts không anh? ví dụ như layouts dùng riêng cho trang quản trị viên hoặc layouts dùng riêng cho khách hàng bên ngoài. Cảm ơn anh ạ
@@F8VNOfficial hi anh, theo hướng dẫn của anh. em sử dụng res.render('home',{layout: 'tên layout'}) là có thể dùng layout khác dc rồi. thanks anh nhiều ạ
mn ơi, em viết y nguyên {{> header}} vào file main.hbs mà s vẫn không truyền được vào header. Bình thường là dấu {{> hiện màu vàng hết, nhưng của em dấu {{ màu vàng, còn > màu đỏ. mà em vào trang hướng dẫn, copy y nguyên luôn
@@itzkamaii 😞 t bỏ k học nữa nên cũng k nhớ chính xác mình fix kiểu j. Nhớ không nhầm là tôi làm lại cái bước theo đúng trình tự như anh Sơn hướng dẫn, không làm tắt bước nào thì nó lại được. Ông thử làm theo chính xác anh Sơn làm, giống cả phần đặt tên , xem đc k nhé
em bị gặp lỗi là khi em thay hàm send() bằng render('home') thì trình duyệt nó cứ quay mòng mòng, morgan cũng không thông báo phản hồi của server hay gì, mọi người biết cách khắc phục lỗi không ạ
syntax import export có từ hồi 2015 rồi mà sao tutorial này cũ thế nhỉ, vẫn dùng mấy cái syntax require của commonjs, ông nào dùng mấy cái syntax này đọc document đúng khó luôn, với lại ko hỗ trợ mấy cái syntax hiện đại ngắn gọn hơn
home và main là để cho dễ nhớ, bạn đặt tên nào cũng được, miển sao đồng bộ với code. còn .handlebars là loại file. Theo mình hiểu là vậy ah. Cảm ơn Bạn. Sai thì chỉnh lại giúp ạ.
E tạo layout mới và dùng layout mới đó cho những trang k muốn dùng layout default. VD làm trang đăng nhập thì t tạo một layout là "authen" và dùng layout này cho trang đăng nhập / đăng ký. Cách dùng layout e xem trong docs handlebars ấy, a đang onl đt k tiện tìm. Nếu k tìm đc thì comment a gửi cho
@@F8VNOfficial Cho e hỏi Passport để xác thực đăng nhập mình dùng thế nào thế a. E có xem doc nhưng vẫn chưa biết cách sử dụng và custom code trong MVC.
Cho em hỏi là tại sao giao diện vừa có thể viết bằng expressJS và vừa có thể viết bằng html và css thuần ạ. Và e bị rối không biết phải code bằng cách nào, phải chăng viết bằng express thì sẽ có nhiều mở rộng hơn. Em cảm ơn anh ạ.
const hbs = require('express-handlebars'); app.engine('handlebars', hbs.engine()); Vì trong file express-handlebars.js, engine() là 1 function đã được export nên để lấy nó ra cần phải dùng hbs.engine(). Còn ko thì install version cũ 5.1.0 giống tác giả.
@huy đoàn chỗ này app.engine('hbs', handlebars,handlebars.engine()({ extname:'.hbs' })) ; có đúng ko vì engine() chỉ app.engine() chỉ nhận 2 params, còn bạn là 3 rồi. Và chỗ handlebars.engine()({ extname:'.hbs' }) này nhìn cũng ko ổn.
Mình làm theo đúng từng dòng luôn nhưng nó báo "TypeError: handlebars is not a function" là sao ta ơi. Vậy phải khai báo thế nào để handlebars là function???
xem comment trước đó (sắp xếp theo thời gian: handlebars() chuyển thành => handlebars.engine()), thứ 2 là bạn tạo file đúng theo cây thư mục mà admin tạo trong đó có file home.handlebars và main.handlebars
@@manhvu9998 Cảm ơn nhiều. Nhưng trong phiên bản mới của express-handlebars, thì họ ko sử dụng lệnh "require" nữa, mà họ sử dụng lệnh "import" , mình cũng đã thử làm theo nhưng nó báo lỗi là sao ta? Sử dụng lệnh "import" có cần điều kiện gì ko vậy bạn??? Cảm ơn
@@ledinhthai69 mình làm đúng như trên vẫn chạy đc mà bạn, mặc định khi cấu hình là chạy bản mới, mình cũng toàn cài bản mới thôi. Hôm qua mình mới chạy bài đó xong. Mình nghĩ bạn cứ chạy như trên là ko vấn đề gì đâu, bạn xem lại tên thư mục và tên link tới file news đã khớp chưa nhé, tên file mình là new, phải sửa là news, mất cả tiếng mới biết lỗi ý ;)). Bạn phải gửi ms lỗi của bạn lên thì có lẽ mình hiểu hơn. Hoặc nếu bí quá ko biết mắc đâu thì mình có thể gửi bạn file mình đang làm theo admin để bạn so sánh
@@manhvu9998 Hí! Mình hiểu tại sao mà lệnh import là ko thực hiện được. Theo bản mới ES6, thì khi sử dụng lệnh import thì mình phải bổ sung trong file package.json thêm 1 dòng lệnh là "type": "module" thì ok.
hiện tại muốn sử dung handlebars không bị lỗi các bạn phải làm như dưới nha, ko là bị lỗi khai báo đấy :V phải ".engine" const hbs = require('express-handlebars'); app.engine('handlebars', hbs.engine());
Error: Cannot find module 'node:path' mọi người choi mình hỏi sao của mình nó cứ ra cái error này là sao vậy ạ, mình thử nhiều cách lắm rồi mà nó vẫn ra cái lỗi này, ai chỉ mình với
Mình cũng gặp phải vấn đề này vấn đề nằm ở node version, sau khi mình update lên phiên bản node 18.15.0 thì đã giải quyết được vấn đề này! Các bạn có thể thử xem sao
const hbs = require('express-handlebars'); app.engine('handlebars', hbs.engine()); Vì trong file express-handlebars.js, engine() là 1 function đã được export nên để lấy nó ra cần phải dùng hbs.engine().
hiện tại muốn sử dung handlebars không bị lỗi các bạn phải làm như dưới nha, ko là bị lỗi khai báo đấy :V
phải ".engine"
const hbs = require('express-handlebars');
app.engine('handlebars', hbs.engine());
hèn chi :D
cài version cũ 5.1.0 giống tác giả cũng ok nha
cam on ban rat nhieu dcm toi d hieu bi loi cho nao 2 ngay nay r thank you so much
hay quá a
@huy đoàn app.engine('hbs',handlebars.engine()({
extname:'.hbs'
}))
đoạn này bạn viết bị sai rồi hay sao ấy, phải như này
app.engine('hbs',handlebars.engine({
extname: '.hbs'
})
);
Ở express-handlebars mới (v6.0.6)
Mọi người có thể làm như sau để không bị lỗi ạ.
const hbs = require('express-handlebars')
app.engine('handlebars', hbs.engine())
app.set('views', './src/resources/views')
thank sir
ty sir
Hay quá ngồi tìm loài cả mắt
camr on ban nhieu lam luoon aayas
cảm ơn bạn nha
thank a nhiều. e đang xem đi xem lại 3 lần. lần 1 xem qua để biết. lần 2: vừa xem vừa làm, lần 3 : xem lại cho hiểu rõ hơn. lần 4: tự code khi không cần xem. :D
update cho ae : (Trên windows nhé)
const path = require('path')
const express = require('express')
const app = express()
const handlebars = require('express-handlebars')
const port = 3000
//template engine
app.engine('handlebars', handlebars.engine());
app.set('view engine','handlebars')
app.set('views', path.join(__dirname, 'resources/views'));
console.log(path.join(__dirname, 'resources/views'))
app.get('/', (req, res) => {
res.render('home')
})
cảm ơn bác lần mãi mới được
cảm ơn bác nhiều
Các bạn sửa giúp mình:
Từ:
path.join(__dirname, 'resources/views')
Sửa thành:
path.join(__dirname, 'resources', 'views')
method join của đối tượng path có thể nhận nhiều đối số nhé, và nó sẽ tạo path thích hợp tùy vào OS đang chạy Node nhé mọi người. Viết theo cách mới thì chúng ta không cần quan tâm tới là windows hay linux nữa.
ok anh
thask anh
em sửa r mà vẫn báo lỗi á anh
cảm ơn anh , cảm ơn anh rất nhiều vì đã tận tâm làm ra những video chất lượng để truyền đạt kiến thức cho sinh viên chúng em , chúc anh và gia đinh luôn mạnh khỏe , hạnh phúc
Các bạn cứ yên tâm xài handlebar, mình đã xài cả ejs,pug, handlebar rồi thấy handlebar sướng nhất, dễ custom nhất, ejs nó hạn chế chỗ layout, pug thì cú pháp ko thuần html nếu viết cho người khác đọc thì ko phải ai cũng hiểu đc ( ví dụ khách hàng ), sau đó mình đã chọn handlebar, handlebar-express chỉ là 1 nhánh của handlebar thôi, handlebar dùng đc cho nhiều framework, các bạn thử gõ handlebar npm sẽ thấy lượng download khủng khiếp hơn hai thằng còn lại nhiều. Nếu bạn nào học Jquery rồi có thể xài Mustache , cũng khá tốt. Riêng mình vẫn chọn handlebar nếu project của mình dùng template engine 🍭
Mustache syntax gần giống hbs
handle bar template này có phải nhánh của handleBar chính không bạn?
update : bạn nào bị lỗi chỗ handlebars cụ thể Error : The partial header could not be found , thì xoá chỗ app.engine ( chỗ đăng ký name hbs) dán dòng này vào nhé : app.engine('hbs',handlebars.engine({extname : '.hbs', partialsDir: path.join(__dirname, 'resources','views', 'partials')})).
cảm ơn bạn nhé ^^
bài giảng quá hay , cảm ơn rất nhiều !!!
Mn cho mình hỏi h mình dùng react code giao diện thì lm sao để cấu hình router cho nó chạy như kiểu handlebar v . Kiểu đi các trag khác thì nó vẫn còn header ý.
update: ai bị lỗi trang cứ load mãi thì thêm config cho hàm handlebar({
defaultLayout: 'main',
extname: 'hbs'
})
mình thêm dòng defaultLayout thì fix được lỗi đấy
thêm ở file nào thế ông
hình như là file index.js ở thư mục src á bạn
nếu gặp lỗi "handlebars is not a function " các bạn có thể làm như này:
const handlebars = require('express-handlebars')
app.engine('handlebars', handlebars.engine({ defaultLayout: 'main' }));
app.set('views engine', 'handlebars')
app.set('views', path.join(__dirname, 'resources/views'));
Ông viết cái chữ view thừa chữ s thành views làm loay hoay mãi
app.set('view engine', 'handlebars');
@@thiendetien97bạn có bị lỗi k mình vẫn lỗi
kiến thức anh xứng đáng có 10ng yêu
Nói nhỏ thôi ko vợ anh nghe thấy huhu
chao a va moi nguoi . cho e hoi: ví dụ nếu res.render('home',{userData}) co cach nao de header o partials cung nhan duoc userData khong a . e muon kiem tra neu nguoi dung dang nhap thi se hien thi logout
Anh giảng chi tiết và dễ hiểu, e từng làm qua rồi nhưng vẫn xem lại xem trước mình học có bị sót kiến thức không
Xin chào,
về cái layout phần chung mình đặt ở file main.hbs
tuy nhiên front-end giao diện khác và admin giao diện khác làm thế nào để tách hẳn 2 phần này anh nhỉ
Các bạn gặp lỗi như sau:
Error: No default engine was specified and no extension was provided.
at new View (E:\BackEnd\Blog
ode_modules\express\lib\view.js:61:11)
at Function.render (E:\BackEnd\Blog
ode_modules\express\lib\application.js:587:12)
at ServerResponse.render (E:\BackEnd\Blog
ode_modules\express\lib
esponse.js:1039:7)
at E:\BackEnd\Blog\src\index.js:23:7
at Layer.handle [as handle_request] (E:\BackEnd\Blog
ode_modules\express\lib
outer\layer.js:95:5)
at next (E:\BackEnd\Blog
ode_modules\express\lib
outer
oute.js:144:13)
at Route.dispatch (E:\BackEnd\Blog
ode_modules\express\lib
outer
oute.js:114:3)
at Layer.handle [as handle_request] (E:\BackEnd\Blog
ode_modules\express\lib
outer\layer.js:95:5)
at E:\BackEnd\Blog
ode_modules\express\lib
outer\index.js:284:15
at Function.process_params (E:\BackEnd\Blog
ode_modules\express\lib
outer\index.js:346:12)
thì fix như cách này nhé:
const handlebars = require("express-handlebars");
const path = require("path");
//Template engine
app.engine("handlebars", handlebars.engine());
app.set("view engine", "handlebars");
app.set("views", path.join(__dirname, "resources", "views"));
app.get("/", (req, res) => {
res.render("home");
});
Hơi rối 1 chút xíu nhưng hay cực anh ơi 💖
Em chịu khó thực hành lại sẽ dễ hiểu hơn nha. Anh phân lại thư mục cho gọn nên hơi rối hơn một chút
@@F8VNOfficial em thấy hay ấy chứ, ngay từ đầu đã tổ chức ntn, sau này mọi người tiếp xúc với FW sẽ bớt lạ lẫm. Giá như biết tới anh từ 6 tháng trước thì có lẽ cuộc đời em sẽ bớt khổ :((
@@vandungnguyen1087 8 thang sau ông đỡ khổ chưa? tôi bắt đầu khổ này :((
hay quá anh ưi
Cho em hỏi em làm tới 15:46 nó bị lỗi như sau
Error: No default engine was specified and no extension was provided.
at new View (E:\BackEnd\Blog
ode_modules\express\lib\view.js:61:11)
at Function.render (E:\BackEnd\Blog
ode_modules\express\lib\application.js:587:12)
at ServerResponse.render (E:\BackEnd\Blog
ode_modules\express\lib
esponse.js:1039:7)
at E:\BackEnd\Blog\src\index.js:23:7
at Layer.handle [as handle_request] (E:\BackEnd\Blog
ode_modules\express\lib
outer\layer.js:95:5)
at next (E:\BackEnd\Blog
ode_modules\express\lib
outer
oute.js:144:13)
at Route.dispatch (E:\BackEnd\Blog
ode_modules\express\lib
outer
oute.js:114:3)
at Layer.handle [as handle_request] (E:\BackEnd\Blog
ode_modules\express\lib
outer\layer.js:95:5)
at E:\BackEnd\Blog
ode_modules\express\lib
outer\index.js:284:15
at Function.process_params (E:\BackEnd\Blog
ode_modules\express\lib
outer\index.js:346:12)
Không hiện ra 1 dòng Error như anh làm
Bạn sửa được lỗi này chưa, hướng dẫn mình với
@@khaiphamhieu được rồi bác, bác xem theo cái cách viết mới bây giờ á
@@nhanphai4372 Bác cho xin nguồn để tham khảo cách viết với ạ
cho e hỏi sao em thêm app.set('views', path.join(__dirname, 'resources', 'views')); r mà vx lỗi Failed to lookup view "home" in views directory ạ
Bạn đổi handlebars thành hbs nhé
app.engine('hbs', hbs.engine({
extname:".hbs"
}));
app.set('view engine', 'hbs');
Anh Sơn Đặng cho em hỏi. với handlebars này mình có cách nào tạo ra nhiều layouts không anh? ví dụ như layouts dùng riêng cho trang quản trị viên hoặc layouts dùng riêng cho khách hàng bên ngoài. Cảm ơn anh ạ
Có chứ e. E tạo thêm 1 file layout nữa và khi gọi view thì e set layout là layout mới đó. E tra docs nó có nói phần đó đó. A đang onl đt tìm k tiện
@@F8VNOfficial hi anh, theo hướng dẫn của anh. em sử dụng res.render('home',{layout: 'tên layout'}) là có thể dùng layout khác dc rồi. thanks anh nhiều ạ
Finally, someone ask the right question.
Mọi người cho mình hỏi cái chỗ title có thể đặt như thế nào để mỗi tilte của mỗi trang khác nhau vậy ạ. Cảm ơn mọi người
mn ơi, em viết y nguyên {{> header}} vào file main.hbs mà s vẫn không truyền được vào header. Bình thường là dấu {{> hiện màu vàng hết, nhưng của em dấu {{ màu vàng, còn > màu đỏ. mà em vào trang hướng dẫn, copy y nguyên luôn
same ông ơi, ko biết sửa kiểu nào, tìm docs r mà vẫn ko sửa được
Hình như là do prettier không support hay sao á code đấy vẫn chạy
@@光-y5t e chạy mà code báo lỗi ko tìm thấy cái thư mục partials header á bác
fix đc chưa bro, tôi bị
@@itzkamaii 😞 t bỏ k học nữa nên cũng k nhớ chính xác mình fix kiểu j. Nhớ không nhầm là tôi làm lại cái bước theo đúng trình tự như anh Sơn hướng dẫn, không làm tắt bước nào thì nó lại được. Ông thử làm theo chính xác anh Sơn làm, giống cả phần đặt tên , xem đc k nhé
a Sơn cho e hỏi e bị lỗi Error: Failed to lookup view "home" in views directory fix như nào ạ
" các bạn sẽ mất nhiều thời gian hơn để học nó khi mà các bạn chưa học nó" -Sơn Đặng-
em bị gặp lỗi là khi em thay hàm send() bằng render('home') thì trình duyệt nó cứ quay mòng mòng, morgan cũng không thông báo phản hồi của server hay gì, mọi người biết cách khắc phục lỗi không ạ
ad xài nhắc lệnh gì thế nhỉ của mình nó chỉ nhắc từ chứ ko có dấu ngoặc
em làm theo y nguyên mà gặp lỗi Failed to lookup view "home" in views directory :((((
Anh ơi cho em hỏi cái lỗi này fix thế nào ạ
Error: ENOENT: no such file or directory, open 'C:\Nodejs\learn\blog\src
esources\view\layouts\main.hbs'
cos ai bị lỗi [nodemon] app crashed - waiting for file changes before starting...
thêm src/ r mà vẫn bị lỗi
chua cai thu vien a ban
m cũng bị lỗi này khi đổi tên đuôi thành hbs , ko biết bạn tìm ra cách chưa
@@thegioicaycanhtrangtri cho mình hỏi là thiếu thư viện gì vậy bạn?
@@vuvu9343 mình cũng bị như thế mà chưa fix được, bạn fix được chưa vậy ạ
mn cho mk hỏi cái extension gợi ý thẻ html trong template string là gì ạ
em bị lỗi này fix sao ạ
app.set("views", path.join(__dirname, "resources", "views"));
^
ReferenceError: __dirname is not defined
đây nhé bạn const __dirname = path.resolve(path.dirname(''));
e làm y vậy nhưng mà file main.hbs không lấy được file home.hbs ạ
mình cũng bị vậy, k biết bạn fix đc chưa
giờ mình muốn thêm 1 đoạn reactJS để tạo 1 pagination thì làm thế nào ạ???
Cannot find module 'express-handlebars'
lỗi này fix sao vậy mọi người
anh ơi, giờ em muốn sử dụng main để làm layouts cho khách hàng, admin để làm layouts cho quản lý dữ liệu, thì em phải chia layouts như thế nào vậy ạ?
uh ha ma ko thay ong rep
good jobs bro
syntax import export có từ hồi 2015 rồi mà sao tutorial này cũ thế nhỉ, vẫn dùng mấy cái syntax require của commonjs, ông nào dùng mấy cái syntax này đọc document đúng khó luôn, với lại ko hỗ trợ mấy cái syntax hiện đại ngắn gọn hơn
Mọi người cho em hỏi cái quy tắc đặt các file .hbs là mình đặt đúng cái quy chuẩn của họ là home.hbs và main.hbs và k đc đặt tên theo của mình hay sao
home và main là để cho dễ nhớ, bạn đặt tên nào cũng được, miển sao đồng bộ với code. còn .handlebars là loại file. Theo mình hiểu là vậy ah. Cảm ơn Bạn. Sai thì chỉnh lại giúp ạ.
khi dựng trang đăng nhập hoặc 1 trang bất kỳ nhưng không muốn sử dụng phần chung header và footer thì mình tách kiểu gì vậy anh.
E tạo layout mới và dùng layout mới đó cho những trang k muốn dùng layout default. VD làm trang đăng nhập thì t tạo một layout là "authen" và dùng layout này cho trang đăng nhập / đăng ký. Cách dùng layout e xem trong docs handlebars ấy, a đang onl đt k tiện tìm. Nếu k tìm đc thì comment a gửi cho
@F8 Official ồ e cảm ơn, e tạo được layout mới và tìm được cách dùng rồi nhé anh. 😍
@@F8VNOfficial e đang cày nát khóa học này, nếu có gì thực sự khó ko hiểu được thì e sẽ bình luận hỏi, a rảnh thì trả lời giúp e với nhé.
@@F8VNOfficial Cho e hỏi Passport để xác thực đăng nhập mình dùng thế nào thế a. E có xem doc nhưng vẫn chưa biết cách sử dụng và custom code trong MVC.
Cho em hỏi là tại sao giao diện vừa có thể viết bằng expressJS và vừa có thể viết bằng html và css thuần ạ. Và e bị rối không biết phải code bằng cách nào, phải chăng viết bằng express thì sẽ có nhiều mở rộng hơn. Em cảm ơn anh ạ.
ké ạ
Trong trường hợp của bạn, {{{body}}} được sử dụng để render nội dung của trang mà không escape HTML
sao khi đổi extname thành .hbs thì cái handlebars chỗ app.engine và app.set cũng phải đổi thành hbs vậy mn , chưa hiểu lắm
Em phân chia header, footer giống a mà sao nó lỗi ko tìm thấy 1 phần tiêu đề a ạ
lỗi này là sao đây ạ : Cannot find module 'express-handlebars'
Mọi người ơi, cho mình hỏi tại sao import engine lại cần ngoặc nhọn {engine} trong khi những hàm khác thì lại không cần
cú pháp es6 í bạn, mình nghĩ v
sao em lại bị lỗi handlebars is not a function mọi người nhỉ
tôi nghĩ là do thằng version của handlebar á, bạn thử cái handlbar bản 5.4.3 hoặc 5.3.0 đi, tôi làm v và chạy dc á
nếu chưa fix được thì cmt lại nhé
@@tranxuantu2783 đã thử bản 5.4.3 hoặc 5.3.0 mà vẫn k dc, mình cũng chưa fix dc bạn nha
@@vantuant2 lúc require thư viện handlebars thì đừng khai báo giống a sơn, b làm như này nhé :
const { engine } = require('express-handlebars');
Mọi người ơi cho em hỏi sao em làm y như vậy rồi lúc chạy nó lại báo Handlebars is not function ạ :((
bạn thử thêm đóng mở ngoặc nhọn vào handlebars ở chỗ khởi tạo xem, như này này: const { handlebars } = require('express-handlebars')
@@vupham5794 mình đã thêm như bạn mà chưa dc
Lúc import express-handlebars bạn thay dấu ngoặc đơn thành ngoặc kép là đc, mình đã thử thành công.
sửa lại 1 xíu nhé:
const handlebars = require('express-handlebars');
app.engine('handlebars', handlebars.engine());
app.set('view engine', 'handlebars');
mn ai còn bị lỗi handlebars không ạ, mai em thi r mà nay nó cứ lỗi import miết, thử nhiều cách r không được!
em đã tải handlebars về r mà lúc app.engine('handlebars', handlebar()) thì nó nói handlebars ko phải là function mong mng giúp em với
const hbs = require('express-handlebars');
app.engine('handlebars', hbs.engine());
Vì trong file express-handlebars.js, engine() là 1 function đã được export nên để lấy nó ra cần phải dùng hbs.engine(). Còn ko thì install version cũ 5.1.0 giống tác giả.
@huy đoàn chỗ này app.engine('hbs', handlebars,handlebars.engine()({
extname:'.hbs'
})) ;
có đúng ko vì engine() chỉ app.engine() chỉ nhận 2 params, còn bạn là 3 rồi. Và chỗ handlebars.engine()({
extname:'.hbs'
}) này nhìn cũng ko ổn.
sao em cũng làm như anh mà console.log nó không hiện thị anh
Ôi mình học quen ejs rồi, cứ xem tới template engine khác là mình phải dừng lại, tiếc quá
e ko chạy được express-handlebars a ạ :(((
Mình làm theo đúng từng dòng luôn nhưng nó báo "TypeError: handlebars is not a function" là sao ta ơi. Vậy phải khai báo thế nào để handlebars là function???
xem comment trước đó (sắp xếp theo thời gian: handlebars() chuyển thành => handlebars.engine()),
thứ 2 là bạn tạo file đúng theo cây thư mục mà admin tạo trong đó có file home.handlebars và main.handlebars
@@manhvu9998 Cảm ơn nhiều. Nhưng trong phiên bản mới của express-handlebars, thì họ ko sử dụng lệnh "require" nữa, mà họ sử dụng lệnh "import" , mình cũng đã thử làm theo nhưng nó báo lỗi là sao ta? Sử dụng lệnh "import" có cần điều kiện gì ko vậy bạn??? Cảm ơn
@@ledinhthai69 mình làm đúng như trên vẫn chạy đc mà bạn, mặc định khi cấu hình là chạy bản mới, mình cũng toàn cài bản mới thôi. Hôm qua mình mới chạy bài đó xong.
Mình nghĩ bạn cứ chạy như trên là ko vấn đề gì đâu, bạn xem lại tên thư mục và tên link tới file news đã khớp chưa nhé, tên file mình là new, phải sửa là news, mất cả tiếng mới biết lỗi ý ;)).
Bạn phải gửi ms lỗi của bạn lên thì có lẽ mình hiểu hơn. Hoặc nếu bí quá ko biết mắc đâu thì mình có thể gửi bạn file mình đang làm theo admin để bạn so sánh
@@manhvu9998 Hí! Mình hiểu tại sao mà lệnh import là ko thực hiện được. Theo bản mới ES6, thì khi sử dụng lệnh import thì mình phải bổ sung trong file package.json thêm 1 dòng lệnh là "type": "module" thì ok.
đoạn làm Layout này giống Jekyll nhỉ
Không biết giữa Pug và ejs thì cái nào tiện hơn a nhỉ
Mỗi người một cảm nhận/đánh giá khác nhau em. Anh nghĩ em nên tự trải nghiệm khi gặp những thắc mắc tương tự như thế này nhé
thanks a lot !!!!!
mình config đuôi file handlebars thành html được ko anh
phần {{{body }}} của mình không dùng được, không hiển thị, bạn nào biết giúp mình với
mình cũng bị bạn à
@@mastercool1947 fix được chưa hướng dẫn mình với
anh ơi sao đoạn handlebars của e nó cứ báo not a function là sao ạ
hiện tại muốn sử dung handlebars không bị lỗi các bạn phải làm như dưới nha, ko là bị lỗi khai báo đấy :V
phải ".engine"
const hbs = require('express-handlebars');
app.engine('handlebars', hbs.engine());
@@anham2025 b tìm thông tin này ở đâu v nhỉ?
@@sonamquan5007 tôi đọc chat
@@anham2025 cảm ơn bạn nhá, t cũng bị lỗi như thế, tìm mãi k fix đc , may đọc đc comment của bạn
Nếu có những route không muốn sử dụng phần header chung thì phải làm như nào a?
Theo t thì đơn giản dùng js cắt mấy elements (header, footer..) khỏi html là xong :), đối với 1 2 view thôi, chứ nhiều dùng cách khác :)
làm y hệt thế này mà vẫn ko chạy được b ơi
Error: Cannot find module 'node:path' mọi người choi mình hỏi sao của mình nó cứ ra cái error này là sao vậy ạ, mình thử nhiều cách lắm rồi mà nó vẫn ra cái lỗi này, ai chỉ mình với
bạn fix đc chưa mik cũng bị thế
Mình cũng gặp phải vấn đề này vấn đề nằm ở node version, sau khi mình update lên phiên bản node 18.15.0 thì đã giải quyết được vấn đề này! Các bạn có thể thử xem sao
9:08 dòng 10 em cứ báo exphbs is not a function
const hbs = require('express-handlebars');
app.engine('handlebars', hbs.engine());
Vì trong file express-handlebars.js, engine() là 1 function đã được export nên để lấy nó ra cần phải dùng hbs.engine().
@@free2idol1 thank ông
@Long Dang cái đây do anh Sơn dùng version cũ.
mọi người ơi mình làm y chang mà cái chỗ handlebars mà vẫn bị lỗi handlebars is not a function
mọi người chỉ mình fix với
@Hưng Huỳnh Ngọc b fix được chưa
nếu chưa fix được thì cmt lại t chỉ cho
@@tranxuantu2783 B ơi chỉ mình với
@@truongtranvan4336 const { engine } = require('express-handlebars'); đây nhé b
app.engine(
'hbs',
engine({
extname: '.hbs',
helpers: {
sum: (a, b) => a + b,
},
}),
);
app.set('view engine', 'hbs');
Sao ko dùng EJS cho dễ a :D
import ExpressHandlebars from "./express-handlebars";
^^^^^^
SyntaxError: Cannot use import statement outside a module
lỗi này là sao vậy ae
mình cũng gặp lỗi này, mặc dù dùng require
@@khangnguyenphuc7174 tui làm theo mấy ông cmt dưới lun cũng bị thế này ko bk fix sao
làm lại đến 2 lần vẫn gặp bug @@
handlebars có vẻ dễ xài hơn thằng pug nhiều nhỉ.
Thật ra pug cũng rất dễ xài, mọi người không quen với pug vì đã quá quen với cú pháp thuần của HTML rồi thôi bạn.
e cài đến cuối, sau khi cài cấu hình xong nó hiện cái lỗi " The partial header could not be found", e mò mãi mà sửa ko dc
mình cũng bị v. bạn fix đc ch
Em nghĩ ejs cũng dễ sài mà nhỉ
Xài cái gì thì em tự lựa chọn được mà, phù hợp với em là ok em nhé
@@F8VNOfficial dạ tại em cũng đang học nodejs em tính học để đi làm về nodejs mong anh ra nhìu clip hơn ạ
v:))))