Khái niệm Template Engine | Sử dụng thư viện Handlebars

Поділитися
Вставка
  • Опубліковано 6 січ 2025

КОМЕНТАРІ • 203

  • @taixuan684
    @taixuan684 3 роки тому +193

    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());

    • @kito4397
      @kito4397 3 роки тому +1

      hèn chi :D

    • @leo2_1
      @leo2_1 2 роки тому +2

      cài version cũ 5.1.0 giống tác giả cũng ok nha

    • @taiuc2923
      @taiuc2923 2 роки тому +6

      cam on ban rat nhieu dcm toi d hieu bi loi cho nao 2 ngay nay r thank you so much

    • @truonghoanglong8335
      @truonghoanglong8335 2 роки тому +1

      hay quá a

    • @taixuan684
      @taixuan684 2 роки тому +1

      @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'
      })
      );

  • @mld.36
    @mld.36 2 роки тому +63

    Ở 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')

  • @mehi6592
    @mehi6592 4 роки тому +1

    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

  • @LeHoang-fv2yk
    @LeHoang-fv2yk 2 роки тому +29

    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')
    })

  • @F8VNOfficial
    @F8VNOfficial  4 роки тому +38

    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.

  • @congminhtran437
    @congminhtran437 4 роки тому

    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

  • @baihocmoi
    @baihocmoi 4 роки тому +7

    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 🍭

    • @thanhhung777
      @thanhhung777 4 роки тому +1

      Mustache syntax gần giống hbs

    • @glorynt7925
      @glorynt7925 3 роки тому

      handle bar template này có phải nhánh của handleBar chính không bạn?

  • @vythevy
    @vythevy 3 місяці тому +1

    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')})).

  • @phamhieu9539
    @phamhieu9539 2 роки тому

    bài giảng quá hay , cảm ơn rất nhiều !!!

  • @hahuuo3
    @hahuuo3 2 роки тому +1

    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 ý.

  • @baothien.se12
    @baothien.se12 3 роки тому +4

    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

    • @minhtrancong3821
      @minhtrancong3821 2 роки тому

      thêm ở file nào thế ông

    • @baothien.se12
      @baothien.se12 2 роки тому

      hình như là file index.js ở thư mục src á bạn

  • @motcanhhoa
    @motcanhhoa Рік тому +4

    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'));

    • @thiendetien97
      @thiendetien97 2 місяці тому

      Ô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');

    • @tuhoangtu1098
      @tuhoangtu1098 Місяць тому

      ​@@thiendetien97bạn có bị lỗi k mình vẫn lỗi

  • @oinhloc2446
    @oinhloc2446 2 роки тому

    kiến thức anh xứng đáng có 10ng yêu

    • @F8VNOfficial
      @F8VNOfficial  2 роки тому

      Nói nhỏ thôi ko vợ anh nghe thấy huhu

  • @tuananhhoang856
    @tuananhhoang856 8 місяців тому

    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

  • @juhandvan
    @juhandvan 4 роки тому

    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

  • @TRUNGLEQUANG-xt9dk
    @TRUNGLEQUANG-xt9dk 2 роки тому

    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ỉ

  • @romschannel6359
    @romschannel6359 2 роки тому +2

    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");
    });

  • @phapnguyen155
    @phapnguyen155 4 роки тому +1

    Hơi rối 1 chút xíu nhưng hay cực anh ơi 💖

    • @F8VNOfficial
      @F8VNOfficial  4 роки тому +2

      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

    • @vandungnguyen1087
      @vandungnguyen1087 4 роки тому

      @@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ổ :((

    • @thanhpc7749
      @thanhpc7749 3 роки тому +1

      @@vandungnguyen1087 8 thang sau ông đỡ khổ chưa? tôi bắt đầu khổ này :((

  • @oinhloc2446
    @oinhloc2446 2 роки тому

    hay quá anh ưi

  • @nhanphai4372
    @nhanphai4372 2 роки тому

    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

    • @khaiphamhieu
      @khaiphamhieu 2 роки тому

      Bạn sửa được lỗi này chưa, hướng dẫn mình với

    • @nhanphai4372
      @nhanphai4372 2 роки тому

      @@khaiphamhieu được rồi bác, bác xem theo cái cách viết mới bây giờ á

    • @khaiphamhieu
      @khaiphamhieu 2 роки тому

      @@nhanphai4372 Bác cho xin nguồn để tham khảo cách viết với ạ

  • @attran1251
    @attran1251 Рік тому

    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 ạ

    • @KhoaTran-bd9ei
      @KhoaTran-bd9ei Рік тому

      Bạn đổi handlebars thành hbs nhé
      app.engine('hbs', hbs.engine({
      extname:".hbs"
      }));
      app.set('view engine', 'hbs');

  • @toainguyen1083
    @toainguyen1083 3 роки тому +1

    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
      @F8VNOfficial  3 роки тому +2

      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

    • @toainguyen1083
      @toainguyen1083 3 роки тому +2

      @@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 ạ

    • @minh551
      @minh551 Рік тому +1

      Finally, someone ask the right question.

  • @anhtuanpham2270
    @anhtuanpham2270 2 роки тому

    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

  • @Jasmine-uq6tx
    @Jasmine-uq6tx 5 місяців тому +2

    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

    • @hoangtheanhtai9
      @hoangtheanhtai9 4 місяці тому

      same ông ơi, ko biết sửa kiểu nào, tìm docs r mà vẫn ko sửa được

    • @光-y5t
      @光-y5t 3 місяці тому

      Hình như là do prettier không support hay sao á code đấy vẫn chạy

    • @hoangtheanhtai9
      @hoangtheanhtai9 3 місяці тому

      @@光-y5t e chạy mà code báo lỗi ko tìm thấy cái thư mục partials header á bác

    • @itzkamaii
      @itzkamaii 8 днів тому

      fix đc chưa bro, tôi bị

    • @Jasmine-uq6tx
      @Jasmine-uq6tx 7 днів тому

      @@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é

  • @phammanhkien2824
    @phammanhkien2824 2 роки тому

    a Sơn cho e hỏi e bị lỗi Error: Failed to lookup view "home" in views directory fix như nào ạ

  • @hungnguyen5966
    @hungnguyen5966 3 роки тому

    " 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-

  • @khanhnguyendang5973
    @khanhnguyendang5973 Рік тому

    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 ạ

  • @sau2metat4nguoikhien72
    @sau2metat4nguoikhien72 2 роки тому

    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

  • @duanphung00
    @duanphung00 3 роки тому +1

    em làm theo y nguyên mà gặp lỗi Failed to lookup view "home" in views directory :((((

  • @trancong1233
    @trancong1233 3 роки тому

    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'

  • @tolikbui4391
    @tolikbui4391 3 роки тому +1

    cos ai bị lỗi [nodemon] app crashed - waiting for file changes before starting...
    thêm src/ r mà vẫn bị lỗi

    • @thegioicaycanhtrangtri
      @thegioicaycanhtrangtri 3 роки тому

      chua cai thu vien a ban

    • @thaitran-lr2pz
      @thaitran-lr2pz 3 роки тому

      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

    • @vuvu9343
      @vuvu9343 3 роки тому

      @@thegioicaycanhtrangtri cho mình hỏi là thiếu thư viện gì vậy bạn?

    • @phanminhtien1896
      @phanminhtien1896 3 роки тому

      @@vuvu9343 mình cũng bị như thế mà chưa fix được, bạn fix được chưa vậy ạ

  • @thenguyenhuu6219
    @thenguyenhuu6219 2 роки тому

    mn cho mk hỏi cái extension gợi ý thẻ html trong template string là gì ạ

  • @vuongnh1705
    @vuongnh1705 3 роки тому

    em bị lỗi này fix sao ạ
    app.set("views", path.join(__dirname, "resources", "views"));
    ^
    ReferenceError: __dirname is not defined

    • @phongnguyenvan289
      @phongnguyenvan289 3 роки тому +1

      đây nhé bạn const __dirname = path.resolve(path.dirname(''));

  • @chinhlevan4684
    @chinhlevan4684 3 роки тому +1

    e làm y vậy nhưng mà file main.hbs không lấy được file home.hbs ạ

  • @uchungnguyen9158
    @uchungnguyen9158 3 роки тому

    giờ mình muốn thêm 1 đoạn reactJS để tạo 1 pagination thì làm thế nào ạ???

  • @sau2metat4nguoikhien72
    @sau2metat4nguoikhien72 2 роки тому

    Cannot find module 'express-handlebars'
    lỗi này fix sao vậy mọi người

  • @sangnguyenquang8259
    @sangnguyenquang8259 3 роки тому

    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 ạ?

  • @minhmuoi352
    @minhmuoi352 4 роки тому

    good jobs bro

  • @catorlife
    @catorlife Місяць тому

    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

  • @phelainy
    @phelainy 3 роки тому

    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

    • @QuangTran-yg2bx
      @QuangTran-yg2bx 23 дні тому

      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 ạ.

  • @thiinh9289
    @thiinh9289 3 роки тому

    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.

    • @F8VNOfficial
      @F8VNOfficial  3 роки тому +1

      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

    • @thiinh9289
      @thiinh9289 3 роки тому +1

      @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. 😍

    • @thiinh9289
      @thiinh9289 3 роки тому +1

      @@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é.

    • @thiinh9289
      @thiinh9289 3 роки тому

      @@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.

  • @atmanh242
    @atmanh242 4 роки тому

    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 ạ.

  • @BáLộcLê-s2j
    @BáLộcLê-s2j 8 місяців тому

    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

  • @tunamusic2314
    @tunamusic2314 3 роки тому

    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

  • @_NguyenQuangAnhTuan
    @_NguyenQuangAnhTuan 3 роки тому

    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 ạ

  • @hiuto8117
    @hiuto8117 2 роки тому

    lỗi này là sao đây ạ : Cannot find module 'express-handlebars'

  • @linhnguyenquoc3517
    @linhnguyenquoc3517 2 роки тому

    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

    • @voxuanhoa1166
      @voxuanhoa1166 2 роки тому

      cú pháp es6 í bạn, mình nghĩ v

  • @thanhNguyen-bx9mi
    @thanhNguyen-bx9mi 3 роки тому +2

    sao em lại bị lỗi handlebars is not a function mọi người nhỉ

    • @leo2_1
      @leo2_1 3 роки тому

      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 á

    • @tranxuantu2783
      @tranxuantu2783 3 роки тому

      nếu chưa fix được thì cmt lại nhé

    • @vantuant2
      @vantuant2 3 роки тому

      @@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

    • @xuantutran6499
      @xuantutran6499 3 роки тому +1

      @@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');

  • @hienongxuan3588
    @hienongxuan3588 3 роки тому +1

    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 ạ :((

    • @vupham5794
      @vupham5794 3 роки тому

      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')

    • @vantuant2
      @vantuant2 3 роки тому

      @@vupham5794 mình đã thêm như bạn mà chưa dc

    • @vantuant2
      @vantuant2 3 роки тому

      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.

    • @voyen7865
      @voyen7865 2 роки тому

      sửa lại 1 xíu nhé:
      const handlebars = require('express-handlebars');
      app.engine('handlebars', handlebars.engine());
      app.set('view engine', 'handlebars');

  • @thanhhau7065
    @thanhhau7065 9 місяців тому

    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!

  • @taiuc2923
    @taiuc2923 2 роки тому

    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

    • @free2idol1
      @free2idol1 2 роки тому +4

      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ả.

    • @free2idol1
      @free2idol1 2 роки тому

      @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.

  • @atnguyencong9569
    @atnguyencong9569 3 роки тому

    sao em cũng làm như anh mà console.log nó không hiện thị anh

  • @MsHaTrang
    @MsHaTrang 3 роки тому

    Ô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á

  • @trunghieuthai9472
    @trunghieuthai9472 Рік тому

    e ko chạy được express-handlebars a ạ :(((

  • @ledinhthai69
    @ledinhthai69 2 роки тому

    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???

    • @manhvu9998
      @manhvu9998 2 роки тому +1

      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

    • @ledinhthai69
      @ledinhthai69 2 роки тому

      @@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

    • @manhvu9998
      @manhvu9998 2 роки тому

      @@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

    • @ledinhthai69
      @ledinhthai69 2 роки тому

      @@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.

  • @bachhoangofficial2981
    @bachhoangofficial2981 Рік тому

    đoạn làm Layout này giống Jekyll nhỉ

  • @inhsonngo5500
    @inhsonngo5500 4 роки тому

    Không biết giữa Pug và ejs thì cái nào tiện hơn a nhỉ

    • @F8VNOfficial
      @F8VNOfficial  4 роки тому

      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é

  • @memeomeo14
    @memeomeo14 4 роки тому

    thanks a lot !!!!!

  • @tuta8590
    @tuta8590 3 роки тому

    mình config đuôi file handlebars thành html được ko anh

  • @dmxnguyen6960
    @dmxnguyen6960 3 роки тому

    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

    • @mastercool1947
      @mastercool1947 3 роки тому

      mình cũng bị bạn à

    • @chinhlevan4684
      @chinhlevan4684 3 роки тому

      @@mastercool1947 fix được chưa hướng dẫn mình với

  • @NamHoang-wo2bf
    @NamHoang-wo2bf 2 роки тому

    anh ơi sao đoạn handlebars của e nó cứ báo not a function là sao ạ

    • @anham2025
      @anham2025 2 роки тому

      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());

    • @sonamquan5007
      @sonamquan5007 2 роки тому

      @@anham2025 b tìm thông tin này ở đâu v nhỉ?

    • @anham2025
      @anham2025 2 роки тому

      @@sonamquan5007 tôi đọc chat

    • @ngocduongofficial290
      @ngocduongofficial290 2 роки тому

      @@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

  • @thanhpc7749
    @thanhpc7749 3 роки тому

    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?

    • @nghiangoquang
      @nghiangoquang 3 роки тому

      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 :)

  • @hungdqh3
    @hungdqh3 2 роки тому

    làm y hệt thế này mà vẫn ko chạy được b ơi

  • @nguyenvanlien02
    @nguyenvanlien02 Рік тому

    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

    • @lethanh4533
      @lethanh4533 Рік тому

      bạn fix đc chưa mik cũng bị thế

    • @minhlh279
      @minhlh279 Рік тому

      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

  • @minhtrancong3821
    @minhtrancong3821 2 роки тому

    9:08 dòng 10 em cứ báo exphbs is not a function

    • @free2idol1
      @free2idol1 2 роки тому

      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().

    • @minhtrancong3821
      @minhtrancong3821 2 роки тому

      @@free2idol1 thank ông

    • @free2idol1
      @free2idol1 2 роки тому

      @Long Dang cái đây do anh Sơn dùng version cũ.

  • @truongnguyensy5458
    @truongnguyensy5458 3 роки тому

    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

    • @tranxuantu2783
      @tranxuantu2783 3 роки тому

      @Hưng Huỳnh Ngọc b fix được chưa

    • @tranxuantu2783
      @tranxuantu2783 3 роки тому

      nếu chưa fix được thì cmt lại t chỉ cho

    • @truongtranvan4336
      @truongtranvan4336 3 роки тому

      @@tranxuantu2783 B ơi chỉ mình với

    • @tranxuantu2783
      @tranxuantu2783 3 роки тому

      @@truongtranvan4336 const { engine } = require('express-handlebars'); đây nhé b

    • @tranxuantu2783
      @tranxuantu2783 3 роки тому +3

      app.engine(
      'hbs',
      engine({
      extname: '.hbs',
      helpers: {
      sum: (a, b) => a + b,
      },
      }),
      );
      app.set('view engine', 'hbs');

  • @nguyentuantrieu8036
    @nguyentuantrieu8036 4 роки тому

    Sao ko dùng EJS cho dễ a :D

  • @Theworldiswithyou
    @Theworldiswithyou Рік тому

    import ExpressHandlebars from "./express-handlebars";
    ^^^^^^
    SyntaxError: Cannot use import statement outside a module
    lỗi này là sao vậy ae

    • @khangnguyenphuc7174
      @khangnguyenphuc7174 Рік тому

      mình cũng gặp lỗi này, mặc dù dùng require

    • @Theworldiswithyou
      @Theworldiswithyou Рік тому

      @@khangnguyenphuc7174 tui làm theo mấy ông cmt dưới lun cũng bị thế này ko bk fix sao

  • @duanphung00
    @duanphung00 3 роки тому

    làm lại đến 2 lần vẫn gặp bug @@

  • @NguyenMinh-hy7lt
    @NguyenMinh-hy7lt 4 роки тому

    handlebars có vẻ dễ xài hơn thằng pug nhiều nhỉ.

    • @F8VNOfficial
      @F8VNOfficial  4 роки тому

      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.

  • @bupbup2312
    @bupbup2312 3 роки тому

    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

  • @ucbinhle4978
    @ucbinhle4978 4 роки тому

    Em nghĩ ejs cũng dễ sài mà nhỉ

    • @F8VNOfficial
      @F8VNOfficial  4 роки тому

      Xài cái gì thì em tự lựa chọn được mà, phù hợp với em là ok em nhé

    • @ucbinhle4978
      @ucbinhle4978 4 роки тому

      @@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 ạ

  • @inhsyduyetkenh5730
    @inhsyduyetkenh5730 4 роки тому

    v:))))