>> Vì vậy, với điều đó đang được nói,
chỉ là loại đơn giản giới thiệu về nguyên mẫu
và mô hình đối tượng JavaScript.
Chúng tôi sẽ không thay đổi bánh răng một chút để nói chuyện
JavaScript về nhiều hơn vào máy chủ và Thư viện Bookshelf
và kết nối Knex Thư viện.
Vì vậy, bạn có thể thực sự chỉ -
nếu bạn tìm kiếm Bookshelf.js nó nên được khá dễ dàng
để tìm kiếm, phải là đầu tiên kết quả, và kệ sách
như David đề cập chỉ cho rất nhiều cấu trúc
xung quanh các đối tượng JavaScript và làm việc với họ relationally
trong cơ sở dữ liệu quan hệ.
Vì vậy, rất nhiều tính năng tương tự người thực sự rất nhiều cảm hứng
bởi ORM Laravel như cũng như Backbone.js,
đó là một kết thúc trước MVC thư viện cho phép bạn
cấu trúc mã của bạn, tương tự như những gì tôi đã thấy
với các ví dụ của nguyên mẫu mà bạn có thể -
thay vì chỉ tùy tiện ném các lớp học
trên quan điểm của bạn ở đây và ở đó.
Nó cung cấp cho bạn các mô hình và bộ sưu tập của những mô hình
trong đó có nghĩa vụ phải làm sắp xếp của một điểm duy nhất của sự thật
về các dữ liệu cho ứng dụng của bạn.
Và sau đó bạn lắng nghe, như những mô hình thay đổi, bạn nói, OK,
lại làm cho mẫu này ở đây và điều này ở đây
và không chỉ cần thêm lớp ở đây, thêm lớp đó và loại chọn
trên bộ chọn và thực hiện các mạng nhện mã jQuery.
Nó mang lại cho nhiều hơn một lớp học dựa trên cấu trúc để miếng cá nhân,
nhưng một phần quan trọng của thư viện đó là các mô hình
trong đó có một cấu trúc tương tự với những gì mô hình Tủ sách làm.
Vì vậy, nếu bạn đã quen thuộc với Kệ sách bạn khá cũng
khá quen thuộc với Backbone.js mô hình,
và tôi muốn giới thiệu tham gia một cái nhìn lúc này.
Vì vậy, một số tính năng chính
nó cung cấp cho bạn chỉ là khả năng thiết lập dữ liệu trên một đối tượng
gọi lấy, mà trả về một kỷ lục cá nhân
từ cơ sở dữ liệu, tạo ra mối quan hệ tương tự như
với những gì bạn xử lý trong trong Laravel
nơi bạn có thể nói một bệnh nhân thiết lập một phương pháp kỷ lục
và nói điều này đã giành được kỷ lục
nơi các đối tượng là kỷ lục bảng tên hồ sơ y tế.
Chúng ta hãy xem.
Có rất nhiều - nó thuộc về -
chỉ là công cụ mà bạn khá tương tự -
khá quen thuộc với đã có, nhưng trong JavaScript.
Và dưới mui xe, cho kệ sách,
nó sử dụng một người xây dựng truy vấn gọi là Knex.js.
Vì vậy, đó là Knex, knexjs.org.
Đó là một tham chiếu đến các đồ chơi nếu bất cứ ai đã từng chơi với điều này.
Nhưng nó cho phép bạn - trong một thời trang tương tự, jQuery,
bạn chỉ cần loại tạo ra một chuỗi các phương pháp khác nhau
mà bạn đang gọi điện thoại trên của bạn hàng cơ sở dữ liệu, do đó bạn có thể -
bạn bắt đầu bằng cách nói Knex và tên bảng.
Vì vậy, ví dụ, người dùng Knex, chọn các cột bạn muốn,
ở đâu, và có nơi khác nhau điều kiện và bạn có thể có
Và ở đâu, hoặc ở đâu, nơi giữa, nơi không,
bạn bây giờ, xuống dòng.
Bạn có thể chỉ định khác nhau tham gia giữa các bảng cơ sở dữ liệu của bạn
mà kệ sách sử dụng nội bộ thiết lập loại ma thuật
xung quanh hasOne, hasMany, belongsTo, belongsToMany.
Và vì vậy sự kết hợp
của hai cho phép bạn làm đẹp nhiều những gì bạn muốn được sử dụng
để trong khuôn khổ như Laravel về
chức năng làm việc với cơ sở dữ liệu.
Vì vậy, chúng ta hãy đi trước và tận xem xét một ví dụ đơn giản
cho một ứng dụng Express làm cho việc sử dụng các mô hình
và bộ sưu tập của Kệ sách nhạc jazz [ngữ âm].
Vì vậy, tôi đã thiết lập một ứng dụng đơn giản ở đây.
Tôi lột ra một số công cụ đã được khởi tạo nhanh
và di chuyển đó vào một init thư mục mà tôi tạo ra.
Một trong những điều tốt đẹp về làm việc với Express vụ
để Laravel là có thực sự không được thực thi nhiều
trên bạn qui ước.
Vì vậy, bạn có thể tạo thư mục -
nó không thực sự cung cấp cho bạn một toàn bộ rất nhiều để làm việc tắt của.
Bạn đã có chỉ là loại một số thiết lập cơ bản và sau đó -
nhưng nó không quan tâm nơi bạn đặt chúng.
Bạn không cần phải có thư mục điều khiển của.
Bạn không cần phải có một mô hình thư mục, một thư mục cấu hình.
Bạn có thể sắp xếp của tạo những nhu cầu như dự án của bạn
và thiết lập những điều đường có ý nghĩa nhất đối với bạn.
Vì vậy, thay vì có tất cả soạn này thể hiện
trong app.js chính tôi vừa nói ứng dụng đòi hỏi bình đẳng init / cao tốc.
Và do đó, trong init,
thư mục khởi tạo Tôi chỉ có Thể hiện ở đây,
và điều này đòi hỏi Express, cuộc gọi chức năng thiết lập, gọi là -
thiết lập các công cụ xem, JSON phân tích cú pháp, tất cả những gì.
Vì vậy, bây giờ, chúng ta hãy tiếp tục xuống.
Vì vậy, tôi yêu cầu Tất nhiên cuộc họp hướng dẫn
và yêu cầu mô hình.
Vì vậy, đây là trong một thư mục Tôi chỉ quyết định mô hình tên.
Nó không phải là Tuy nhiên cách thức mà nó có ý nghĩa,
nhưng mô hình chỉ khá phổ biến vì vậy tôi muốn giới thiệu nó.
Nhưng - Vì vậy, hãy đi cho khóa học.
Tôi nghĩ rằng tôi đang sử dụng - yeah, và các ví dụ
ở đây tất cả đều dựa xung quanh mô hình khóa học.
Vì vậy, hãy chỉ mất một nhìn vào đó.
Vì vậy, bây giờ, chỉ của Dòng đầu tiên của mô hình này,
Tôi đã yêu cầu cái gì khác.
Vì vậy, nếu bạn sẽ thông báo trong nút bạn nên yêu cầu
hoặc bạn sẽ kết thúc đòi hỏi phải có một bó toàn bộ
các tập tin khác nhau được đặt
ở những nơi khác nhau trong ứng dụng của bạn.
Và đường dẫn tương đối để mọi lúc mọi nơi
trong ứng dụng hiện tại của bạn,
trừ khi nó là một cấp cao nhất đã định nghĩa như trong bạn cài đặt nó
với MPM như kệ sách hay Knex hoặc Express hoặc một cái gì đó,
những người không liên quan.
Có? Phóng to hơn?
OK. OK. Vì vậy, bạn sẽ kết thúc yêu cầu một bó toàn bộ
file chỉ khác nhau trong của bạn mã, mà là tốt và xấu.
Một cách tốt, bạn biết nơi điều đang có và nó không phải là loại
ma thuật như những gì xảy ra dưới mui xe,
mà thực sự có thể gây nhầm lẫn
khi bạn có một rất Java nặng -
hoặc khuôn khổ rất nặng như Laravel, trong đó loại nói,
chúng tôi sẽ chăm sóc điều này, do đó bạn không có
yêu cầu tất cả mọi thứ nhưng bạn có
biết làm thế nào tất cả mọi thứ hoạt động để sử dụng nó.
Nơi như trong trường hợp này, đó là rất đơn giản như
nơi mà mọi thứ, họ chỉ kết thúc
lên được một chút đánh máy hơn.
Cũng như ở phía tôi thích để sử dụng, có một plugin
nếu bạn sử dụng một văn bản mù
nơi bạn có thể lắp đặt các nút các mô-đun helper và bạn có thể bắt đầu
gõ như hướng dẫn và nó tạo ra đường dẫn tương đối
bạn đang ở đâu đó tập tin mã, loại hữu ích.
Vì vậy, mô hình trình được yêu cầu cơ sở ở đây
và sau đó cơ sở thực tập yêu cầu init / kệ sách
và sau đó là kệ sách, nó yêu cầu các kệ sách ở cấp cao nhất
và sau đó khởi tạo nó với ví dụ Knex khởi tạo,
trong đó đặt tên khách hàng
và kết nối cài đặt cho các cơ sở dữ liệu.
Vì vậy, tôi chỉ sử dụng một đơn giản thể hiện của Sequel Pro mà -
MySQL, tôi truy cập nó với Phần tiếp theo Pro và nó có chỉ là loại
của một cơ sở dữ liệu tương tự thiết lập như chúng tôi đã có
trong ứng dụng mẫu đầu tiên với các cửa hàng tất nhiên.
Vì vậy, tôi thiết lập kết nối của tôi thiết lập ở đây,
và đây là tất cả tài liệu trên trang dự án Knex.js
như thế nào để thiết lập những kết nối này.
Vì vậy, bây giờ tôi có mô hình cơ sở của tôi.
Và như tôi đã đề cập với sự thay đổi mẫu,
để có thể thực sự có loại rất nhiều để -
cho biết thêm rất nhiều soạn để mã của bạn để ước
đã được chuyển thể bởi Backbone.js
và bây giờ là Bookshelf.js để thêm phương pháp này mở rộng
như một tài sản tĩnh trên các đối tượng JavaScript của bạn,
mang đến cho nó một loại gần như tính chất thừa kế dựa trên lớp
mà nếu bạn gọi mở rộng bạn có thể thiết lập bất kỳ
trong những phương pháp nguyên mẫu mà bạn muốn ở đây
và sau đó bạn có thể - bất kỳ thêm phương pháp tĩnh
mà bạn có thể muốn, bạn có chỉ có thể thiết lập chúng mình
ra đây để tôi có thể mở rộng nó - vì vậy nếu ví dụ,
nhiều mô hình cần thiết hiển thị tên và điều này có được tên.
Vì vậy, ở đây, tôi nói rằng tên hiển thị cho mô hình
theo mặc định là bất cứ điều gì tên của nó tài sản là nếu không trở lại
không có tên.
Và bây giờ mỗi mô hình đó là một -
mở rộng mô hình cơ sở này, tôi bây giờ có một phương pháp tên hiển thị
trên nguyên mẫu chuỗi một nơi nào đó.
Và nếu tôi muốn ghi đè lên nó Tôi chỉ có thể thiết lập nó - thiết lập những gì -
getName sẽ ở đây.
Và nó cho phép bạn để bắt chước thừa kế cổ điển
trong JavaScript, có thể được đẹp đặc biệt cho những thứ
được cho vay mình là lớp học dựa như mô hình đối tượng.
Vì vậy, hãy nhảy trở lại các mã ứng dụng.
Vì vậy, tôi đã có một tuyến đường chỉ cắt giảm, chỉ cho chỉ số của tôi
và sau đó cắt giảm các khóa học.
Và cả hai đang kêu gọi các renderCourses phương pháp.
Vì vậy, một lần nữa, chức năng lớp học đầu tiên và có thể được thông qua
như đối số cho phương pháp.
Vì vậy, trong app.get này, Tôi gọi điện thoại -
Tôi đang đi renderCourses như là đối số.
Và đưa ra - hoặc các chức năng có thể được thiết lập như var -
như tôi đã làm trước đó var renderCourses bằng chức năng
hoặc họ có thể được chỉ renderCourses chức năng.
Nó không làm cho quá nhiều sự khác biệt.
Bạn thực sự có thể có những gì được gọi là chức năng tên
biểu, trong đó có var renderCourses bình đẳng
renderCourses chức năng.
Và, lý do muốn có tên các chức năng đặc biệt
trong nút là nó cung cấp cho bạn một trình dọn dẹp -
dễ đọc hơn vết đống.
Vì vậy, nếu bạn có một bó toàn bộ
các chức năng vô danh nó sẽ nói -
khi bạn có một lỗi trong mã của bạn vì bạn sẽ -
bạn sẽ không biết được chức năng nó đang gọi bạn phải tìm
tại mã số và số dòng
và nó đôi khi dễ dàng hơn chỉ để phân tích cú pháp trực quan
khi bạn thực sự có tên
cho các chức năng mình ở phía máy chủ.
Vì vậy, renderCourses này, chúng ta hãy gọi ứng dụng nút -
do đó, tôi lắng nghe trên Lõi 3000 [âm].
Và vì vậy tất cả điều này được làm ngay đây chỉ là nhận được tất cả các
các khóa học từ cơ sở dữ liệu.
Tôi thậm chí không hạn chế nó do đó, nó thực hiện một số lượng lớn
hàng nó trở về.
Và để làm được điều này,
trên mô hình Tất nhiên có là một thuộc tính tĩnh
được gọi là bộ sưu tập.
Và vì vậy tôi chỉ cần gọi nó - tôi nói tạo ra một bộ sưu tập mới
cho khóa học này, và sau đó lấy nó,
và sau đó trở về các khóa học bộ sưu tập ở đây trong lời hứa.
Vì vậy, trong nội bộ, David trong - các nửa cuối dạy một chút
về lời hứa và lời hứa là được sử dụng rất nhiều trong cả hai Knex
và kệ sách vì nó đem đến cho -
nó sẽ cho bạn khả năng có một bó
các cuộc gọi không đồng bộ khác nhau và loại tham gia sau đó cùng nhau
hoặc lấy một cái gì đó, và sau đó
với cuộc gọi khác cơ sở dữ liệu không đồng bộ cuộc gọi
và trả lại giá trị đó và sau đó chuyển đến tiếp theo sau đó
và tiếp theo sau đó và sau đó có một bắt vào cuối để sắp xếp
của bắt chước không đồng bộ cố gắng nắm bắt hành vi với mã không đồng bộ,
bởi vì bạn đang nhìn thấy nó bây giờ
nhưng nó thậm chí còn khó khăn hơn một lần bạn bắt đầu để đối phó với nó.
Mã không đồng bộ chỉ là ở khắp mọi nơi
phía máy chủ JavaScript và thực sự đến một mức độ lớn hơn nhiều
hơn bạn đang sử dụng để nếu bạn đã thực hiện JavaScript
về phía khách hàng.
Vì vậy, đó thực sự, thực sự giúp bạn ra khỏi đó.
Nhưng chỉ để cho bạn tuyên bố gỡ lỗi
mà tôi đã nói về trong các công cụ thanh tra nút,
Tôi sẽ đi trước và ném một dòng gỡ rối đây
trong chức năng renderCourses và nhìn thấy nơi dẫn tôi
khi tôi - vì vậy nút thanh tra có thể được cài đặt
bằng cách làm NPM Cài đặt với một lá cờ G,
có nghĩa là toàn cầu Nút thanh tra.
Và nó sẽ lấy nó cho NMP và cài đặt nó trên toàn cầu
cho các ứng dụng của bạn vì vậy bạn chỉ có thể gọi nó
từ dòng lệnh.
Tôi đã cài đặt nên tôi sẽ đi trước và -
thực sự nó có thể có chờ đợi nó sẽ chỉ mất,
mất hai giây.
Và những gì nút thanh tra một lần nữa cho phép bạn
làm là có không đầu này phiên bản của giao diện trình gỡ rối
mà bạn đang sử dụng để khi làm việc về phía khách hàng và có thể
dừng lại, chỉ cần thêm quy định chỉ trong mã của bạn.
Ngừng thực hiện và tham gia một nhìn vào những gì đang xảy ra,
trong đó sẽ có thực sự có ích nếu tính năng
như vậy đã có sẵn
khi gỡ lỗi của bạn Mã PHP tôi chắc chắn.
Vì vậy, hãy chỉ mất một nhìn vào đó.
Vì vậy, tôi chỉ có thể gọi nút thanh tra
và nó sẽ nói truy cập vào URL này cổng 5858 để bắt đầu gỡ lỗi,
đó chỉ là mặc định nó như thế nào khởi động.
Vì vậy, bây giờ tôi đã có - có không có gì xảy ra ở đây
bởi vì tôi cần phải bắt đầu.
Vì vậy, nút bế tắc [ngữ âm] các cờ gỡ lỗi và sau đó app.js.
Vì vậy, nó nói gỡ rối lắng nghe trên cổng 5858,
Nghe máy chủ nhanh trên 3000.
Vì vậy, chúng tôi đang tốt để đi.
Hãy để tôi chỉ cần làm mới này.
Và bây giờ tôi có thể nhìn thấy app.js mã mà tôi chỉ nhìn vào
nhưng ở đây trong giao diện điều khiển.
Vì vậy, bây giờ, nếu tôi cố gắng chạy này, bạn có thể nhìn thấy nó, nó dừng lại.
Nó chỉ là chờ đợi bởi vì nó toàn bộ thực thi mã tại là
dừng lại sửa lỗi này đường mà tôi đã đặt vào đó.
Và bây giờ tôi có thể máy chủ -
[Ghi chú không nghe được]
Oh, yeah. Từ khóa là những gì phím tắt để phóng to màn hình?
Oh có.
Đã nhận nó. OK.
[Tạm dừng]
Oh, nó không tìm kiếm [Ngữ âm] đó.
Vì vậy, các khóa học thực sự lớn
bởi vì tôi không phải làm một hạn chế khoản hoặc bất cứ điều gì,
nó chỉ lấy các toàn bộ cơ sở dữ liệu của các khóa học
mà rất nhiều trong số họ.
Và như vậy - mà là đối tượng
mà thực sự có thể sụp đổ trường hợp thanh tra lưu ý.
Nó là - OK.
Hãy để tôi làm một giới hạn và sau đó chúng ta có thể có một cái nhìn
khi nó không lấy hàng trăm khóa học.
Vì vậy, tiêu diệt các máy chủ và thanh tra
và tôi sẽ làm tất nhiên truy vấn bộ sưu tập giới hạn 20.
Vì vậy, trong kệ sách, không giống như trong Laravel
mà bạn chỉ có thể gọi hạn chế trực tiếp hoặc gọi bất kỳ
các phương pháp SQL mà bạn sử dụng
trực tiếp trên dụ ORM.
Bất cứ lúc nào mà bạn đang sử dụng chỉ Phương pháp SQL được cung cấp
trong Knex, bạn phải gọi truy vấn để sắp xếp
của khai thác vào chuỗi truy vấn.
Và điều này có thể được gọi với một trong hai chức năng,
vì vậy bạn có thể nói, chức năng giới hạn này 10 hoặc bạn gọi nó
bằng cách xác định mà phương pháp bạn muốn gọi
trên dụ Knex và sau đó có giá trị.
Vì vậy, chúng ta sẽ làm hạn chế 20 và sau đó thiết lập.
Chúng tôi thực sự không cần gỡ rối đây
bởi vì chúng ta có thể chỉ đặt breakpoint
và làm cho nó dễ dàng hơn.
Được rồi.
Vì vậy, hãy thiết lập một breakpoint ngay tại đây và cố gắng để tải nó.
Dòng sai.
Ngay tại đây.
[Tạm dừng]
OK. Vì vậy, nó dừng lại một lần nữa.
Vì vậy, bây giờ, là một khóa học đối tượng với chiều dài của 20
và chúng ta có thể thấy tất cả các khác nhau mô hình mà nó lấy
từ cơ sở dữ liệu ngay tại đây vì vậy tôi đã có một mô hình đối tượng
trong đó có, bên trong thuộc tính bất động sản
trên đối tượng là tất cả những điều mà nó được tìm thấy trong cơ sở dữ liệu.
Bất kỳ sự kiện có được đăng ký
do đó, bạn có thể đăng ký sự kiện khác nhau,
ví dụ như khi mô hình đang được xóa
hoặc khi nó được tải xuống,
bạn có thể thiết lập khác nhau tài sản hoặc thay đổi mọi thứ.
Có rất nhiều móc khác nhau và đây là tất cả tài liệu
trong Bookshelf.js tài liệu hướng dẫn cho phép bạn
để làm bất cứ điều gì loại mà bạn thực sự muốn làm
với các mô hình của bạn và bộ sưu tập.
Bạn có thể - họ đang có nghĩa để được thực sự tùy biến
và thực sự dễ dàng cho bạn thích ứng với họ
với nhu cầu của bạn ứng dụng.
Nhưng chỉ cần nhìn qua đây,
Tôi có thể xem những gì khác nhau các khóa học có sẵn.
Và trong trường hợp này, tôi thực sự không lấy
với bất kỳ dữ liệu nào khác ngoài chỉ là các khóa học của mình.
Nhưng trong thời trang tương tự như hùng hồn ORM bạn có thể thiết lập
quan hệ, do đó khóa học thuộc về nhiều người hướng dẫn.
Vì vậy, nếu tôi đi trước và ngăn chặn các ứng dụng,
nhảy này lấy cuộc gọi, bạn có thể chỉ định lựa chọn khác nhau
mà bạn muốn vượt qua cùng với nó.
Và một trong số họ là khả năng tải mã liên quan
bằng cách xác định withRelated hướng dẫn các khóa học sau đó.
Vì vậy, chúng ta hãy quay trở lại và tươi này ở đây và dừng lại một lần nữa.
Vì vậy, bây giờ, các khóa học đối tượng, cùng một số mô hình,
nhưng bây giờ mỗi mô hình có một băm quan hệ
trong đó có các giáo viên hướng dẫn rằng nó liên quan đến.
Vì vậy, khóa học này cho ví dụ
đó là tất nhiên 082 có hai mô hình hướng dẫn liên quan.
Và bạn đã có thể xem như thế nào dễ dàng hơn nhiều này là để sắp xếp
của thị giác làm việc với hơn khi bạn đang làm việc với các công cụ
mà bạn loại thay đổi mã và sau đó thử lại lần nữa trong PHP.
Thực tế là bạn chỉ có thể ngừng thực hiện hoàn toàn
và đánh giá những gì ở đây và - trong giao diện điều khiển, các -
thu nhỏ, các khóa học, bạn biết,
những gì mà phạm vi địa phương biến có sẵn
và điều này hiện nay là toàn cầu đối tượng bởi vì khi bạn nhìn thấy nó,
trừ khi bạn gọi với một bối cảnh cụ thể, nó sẽ không
để có cái gì liên quan ở đây.
Và sau đó, - cho tôi cho thấy một vài ví dụ hơn
thực hiện lời hứa.
Vì vậy, thay vì làm điều này hướng dẫn withRelated đây tôi
sẽ đi trước và di chuyển này để lấy và sau đó là các khóa học,
Tôi sẽ quay trở lại hướng dẫn courses.load.
Và sau đó - sau đó bạn gọi sau đó.
[Tạm dừng]
Vì vậy, sau đó tại thời điểm này, các khóa học sẽ được nạp
với giáo viên hướng dẫn, mà là hành động không đồng bộ.
Nhưng bởi vì chúng tôi trả lại nó từ một lời hứa, giá trị tiếp theo
cho sau đó là bất cứ điều gì này trở về cuộc gọi không đồng bộ
mà trong trường hợp tải này là một phương pháp trong Bookshelf
mà thực sự trả về bộ sưu tập riêng của mình.
Vì vậy, nó tải hướng dẫn trên có
và sau đó bạn có thể chỉ định - nếu nó chỉ là một tài sản,
bạn có thể chỉ định này như chuỗi, nếu không,
bạn có thể làm hướng dẫn viên và yêu cầu
như một phương pháp - xin lỗi, như là một mảng.
Và sau đó nếu bạn muốn để có được thực sự ưa thích và hạn chế bất kỳ
các cho lần nạp, bạn có thể xác định nó như là một băm
với giáo viên hướng dẫn và sau đó những gì bạn muốn giới hạn các truy vấn trên.
Vì vậy, tôi muốn tải tất cả hướng dẫn về các khóa học mà -
vì vậy QB cho xây dựng truy vấn nơi tình trạng đang hoạt động.
Và bạn có thể thực sự ưa thích với bất kỳ
các truy vấn liên quan bạn muốn xây dựng.
Nhưng, chỉ cần bây giờ, chúng ta sẽ để dính vào chỉ giáo viên hướng dẫn
và chúng tôi đang trở về giá trị
để sau đó tiếp theo sau đó nên có tất cả các khóa học được nạp
đúng.
Và nếu có một lỗi tại bất cứ bước nào trong chuỗi đó,
nó sẽ nhảy xuống đánh bắt.
Vì vậy, hãy đi trước và chạy đó.
Vì vậy, mỗi lần - không giống như trong PHP, một nhược điểm là
"Vì nút" là một hoạt động dài quá trình, bạn thực sự cần
để ngăn chặn quá trình nút như bạn cập nhật mã của bạn,
vì phiên bản mà nó chạy trong thời gian chạy là,
các phiên bản của code mà nạp
khi bắt đầu không những gì bạn có loại
cập nhật của mã của bạn với từ đó.
OK. Chúng tôi sẽ thiết lập một breakpoint ở đây, ở đây và làm mới.
[Tạm dừng]
Ồ, tôi thực sự đã làm không làm mới trang này hoặc
do đó, nó là về quy trình cũ.
Vì vậy, bạn làm mới cả này và thanh tra nút.
Vì vậy, bây giờ chúng ta thấy các khóa học.
Nếu chúng ta chỉ lấy mẫu của một trong những mô hình,
chúng ta có thể thấy rằng các mối quan hệ đối tượng là trống rỗng, nhưng bây giờ -
và lý do mà bạn cần để đặt breakpoint là, tốt,
Tôi nói rằng bạn có thể nhảy vào ngăn xếp dấu vết
và xem bạn đã biết, nơi nó sẽ trong các ứng dụng.
Vì vậy, bây giờ tôi có thể nhìn thấy những gì xảy ra trong phương pháp tải,
mà tôi đã xác định trên các bộ sưu tập.
Nó loại "Háo hức tải các mối quan hệ trên đã được ".
Và bạn có thể bước qua và xem từng dòng
nơi công cụ này là sẽ là tuyệt vời.
Nếu bạn có một cái gì đó đó là bị phá vỡ trong mã của bạn,
nó ném một số lỗi và bạn giống như, tôi thực sự muốn
để xem nơi này là đi.
Nhưng ngay sau khi bạn chạy vào một cái gì đó không đồng bộ, -
nó đi kế tiếp đánh dấu vào các vòng lặp sự kiện
và bạn sẽ bị mất của bạn - bạn mất vị trí của bạn
trong thanh tra nút.
Vì vậy, bạn cần phải nói, "OK, một khi tôi bị mất này,
nó cần phải dừng lại tại dòng này một lần nữa. "
Bởi vì nếu tôi tiếp tục đánh xuống, xuống đống,
nó sẽ có cuối cùng chỉ đi xa đã tôi không thiết lập này
dòng 22 màu xanh ngắt dòng.
Vì vậy, bây giờ, nếu tôi nhìn tại các khóa học ở đây,
cần thiết trên các mối quan hệ giáo viên hướng dẫn
và sau đó có hướng dẫn đính kèm chúng.
Vì vậy, bạn có thể thấy rằng tôi trở về một lời hứa từ lời hứa đầu tiên
và sau đó bạn có thể liên tục làm điều đó xuống dòng.
Vì vậy, các lời hứa khác nhau, hứa thư viện,
Tôi đã sử dụng một gọi là Bluebird đó là thực sự hữu ích.
Nó cho biết thêm rất nhiều tốt đẹp của này để thay đổi không đồng bộ -
thay đổi cuộc gọi trở lại mã cơ sở vào công cụ
hoạt động tốt với lời hứa hẹn.
Nhưng - xin lỗi [không nghe được] những gì Tôi sẽ nói nó ở đó.
Chúng ta hãy có một cái nhìn mặc dù tại -
vì vậy hãy nói rằng có một vấn đề khi lấy một cái gì đó.
Vì vậy, tôi có con đường khác này để tìm được gọi là ID nhiên.
Vì vậy, chúng ta hãy làm nhiên 2.
Tôi có thể nhận được - JSON nhiên.
Và điều này [nghe được].
[Tạm dừng]
Tôi ngửi thấy mùi một cái gì đó sai trái ở đây.
Không phải trên 3000, tôi đã được trên tab thanh tra Chrome.
OK. Vì vậy, chúng ta hãy đi đến Tất nhiên - JSON nhiên 1.
Và điều này trả về chỉ trong JSON định dạng, khóa học tải
với một số giáo viên hướng dẫn.
Nhưng ví dụ tôi muốn để đưa ra ở đây là,
Tôi đang làm tất nhiên JSON ID.
Và trong các thông số lấy, Tôi xác định yêu cầu sự thật,
đó là một lựa chọn đó là tài liệu trong Bookshelf
mà nó nói rằng, "Nếu, Tôi cố gắng và tìm khóa học này
và nó không có ở đó, sau đó ném một lỗi. "
Và rằng cần phải được đánh bắt bởi bắt chặn ở đây.
Vì vậy, hãy đi trước và nhảy trở lại vào nút thanh tra và thử
và phá vỡ này và xem những gì chúng tôi có.
Vì vậy, hãy thiết lập một break đây trên sân JSON.
Được rồi.
Tôi sẽ đi đến JSON khóa học và Tôi sẽ chỉ đưa vào một số -
[Tạm dừng]
Nó có thể là một chút khó khăn đôi khi bạn đang cố gắng
để quản lý mà một đã được làm mới
và có không - chúng ta hãy xem.
Vì vậy, nó đang gọi lỗi phản ứng có sản phẩm nào.
[Tạm dừng]
Chúng ta hãy ném một trình sửa lỗi tại đây.
Vì làm thế nào nút thực sự tối ưu hóa
cho thời gian chạy JavaScript để được như vậy nhanh trên máy chủ,
đôi khi nút gỡ rối có một số lỗi khi bạn cố gắng
và thiết lập các điểm ngắt tự động và bạn thực sự làm cần
sử dụng một trình gỡ lỗi và không phải là dòng-by-line.
Vì vậy, chúng ta hãy xem nếu điều này được chúng tôi những gì chúng tôi muốn.
Vì vậy, tôi thiết lập, app.get Tất nhiên JSON id,
và tôi đã thiết lập chương trình gỡ rối của tôi ở đó
trong báo cáo đánh bắt ở phía dưới.
Lấy yêu cầu sự thật, nó - tất cả các bên phải, có chúng tôi đi, đã phá vỡ.
Vì vậy, bây giờ tôi có thể nhìn thấy mà nó dừng lại
ở khối catch cuối cùng này vì withRelated -
hoặc vì yêu cầu thực quy định và không có nhiên
với ID này lớn số thông qua một ngoại lệ
mà bây giờ là Emessage.
Và mỗi lỗi trong JavaScript có một tài sản chồng
mà đi kèm cùng với nó.
Vì vậy, nó thường hữu ích Để ví dụ,
an ủi đăng xuất e.stack.
Và tôi thực sự có thể nhìn thấy khi tôi nhấn một lỗi.
Vì vậy, tôi nhận được lỗi trống phản ứng, đó là tin nhắn
đã được gửi qua kệ sách.
Nhưng bây giờ, tôi có thể có một cái nhìn tại, tại cuộc gọi stack và xem
mà trong Bookshelf phương ngữ SQL mô hình 83,
phản ứng này có sản phẩm nào lỗi đã được ném.
Và đây là nơi tôi đề cập đến, đó là dấu chấm vô danh
bởi vì nó là một vô danh chức năng.
Nếu đó là một chức năng tên bạn sẽ có những ý tưởng tốt hơn
để có chức năng thực sự thông qua mà không cần phải đi
vào mã model.js.
Mặc dù nó có nghĩa là phải khá, khá dễ đọc,
vì vậy tôi có thể nhìn thấy trực tuyến.
Họ đã nói gì tôi là dòng 83.
Vì vậy, nếu options.require và phản ứng không tồn tại,
nó bây giờ ném một mới lỗi phản ứng có sản phẩm nào.
Vì vậy, bạn có thể nhìn thấy khá đơn giản như thế nào mà làm việc.
Và nội bộ trong kệ sách,
có săn cả bó sử dụng những lời hứa.
Vì vậy, bạn có thể chỉ định Promise.method
với thư viện Bluebird mà giữ bối cảnh chính xác
của điều này trong khi quay trở lại một lời hứa.
Và vì vậy tôi đã - Tôi đang ràng buộc các giá trị này tương tự
với những gì tôi đã đề cập trước đó, nhưng sử dụng những lời hứa
và sau đó tôi có thể - là mới.
Nó có thể được đồng bộ hay không nếu tôi muốn.
Và sau đó tôi làm một số những thứ khác mà có thể
hoặc có thể không đồng bộ và sau đó các loại nhảy xuống.
Vì vậy, Promise.all là một người trợ giúp mà rất nhiều thư viện phổ biến có
nơi bạn có thể có một loạt các khả năng có thể
hoặc có thể không hứa hẹn.
Và một khi tất cả những người đang có hoàn tất, bạn quay trở lại mà
và sau đó nó nhảy đến dòng kế tiếp
và bạn có thể thấy nó thực sự flattens ra kim tự tháp
mà bạn nhận được, địa ngục gọi lại như được biết đến của nó
nếu bạn đang làm tất cả mọi thứ với callbacks từng dòng.
Có nhiều cách để có được xung quanh đó nhưng hứa hẹn là một trong những
những cách tốt nhất theo ý kiến ​​của tôi
để thực sự giữ mã của bạn sạch sẽ và dễ đọc.
Vì vậy, đó chỉ là một đoạn ngắn giới thiệu về JavaScript
và kệ sách và Knex nói chung.
Và, nếu có bất kỳ câu hỏi, Tôi biết đó là một tấn vật liệu
để loại thử và bìa đặc biệt là từ các ngôn ngữ,
không giống như hầu hết các người là bạn quen thuộc với vì vậy tôi chỉ muốn
để làm cho nó để ít nhất nếu bạn gặp vấn đề
với mã của bạn, bạn loại có thể nhảy vào -
đó là những gì tôi muốn làm, là loại nhảy vào thư viện
mà tôi đang sử dụng và xem thế nào những điều được cấu trúc.
Có một mà tôi đã đề cập đến trước đó được gọi là Backbone.js
và trên thực tế nó [Nghe được] trên các mặt hàng
để giúp cho mô hình xem cấu trúc điều khiển
mã của bạn.
Nhưng nó thực sự có nguồn tài liệu được chú thích
cho phép bạn loại xem.
Nó thực sự tốt tài liệu, những gì đang xảy ra,
làm thế nào nó làm tăng các chức năng Ajax
hoặc các chức năng sự kiện hay các mô hình và bộ sưu tập loại
giải thích những gì xảy ra trong quá trình này.
Và nếu bạn hiểu những điều cơ bản của JavaScript
như thừa kế nguyên chủng và như thế nào các chức năng được sử dụng
như cả hai đối tượng và giá trị và các lớp học và tất cả mọi thứ.
Nó làm cho nó dễ dàng hơn nhiều để hiểu những gì đang xảy ra
trên khả năng trong thư viện mà bạn đang sử dụng
và mã gỡ lỗi và có thể để không bị đập đầu của bạn
vào tường vì bạn không hiểu làm thế nào
phần khác nhau đang làm việc, vì vậy.