2012-07-03 42 views
79

Tôi đã tự hỏi làm cách nào để phát triển một trang web từ đầu với Node.js. Tôi hiểu cách tôi có thể có thể làm điều đó, nhưng tôi quan tâm đến việc thực hành thiết kế tốt nhất tốt nhất.Các phương pháp hay nhất về xây dựng một trang web bằng cách sử dụng Node.js

tôi cần website lý thuyết này để:

  1. Thực hiện nhiều AJAX
  2. Hãy rất đơn giản
  3. Hãy tương đối nhỏ
  4. Connect để ... giả sử một máy chủ MySQL

Trong PHP, xây dựng một trang web khá nhỏ là rất đơn giản - tôi thiết lập PHP trên Apache và một máy chủ MySQL và sau đó làm điều gì đó như:

  • includes/db/ trong đó có connect.php để kết nối với db, một tập tin với các chức năng db chung có liên quan và vân vân
  • includes/layout/ trong đó có những thứ như footer.php, header.php, và bố trí khác có liên quan thứ
  • includes/users/ để xử lý người sử dụng liên quan đến hành động

Sau đó, PHP chỉ cho phép bạn xây dựng trang và bao gồm những tập tin này với nhau để tạo một trang web - tôi có thể đi một cái gì đó như:

<?php 
    require_once('inclues/users/user_session.php'); 
    require_once('inclues/db/connect.php'); 
    require_once('inclues/design/header.php') 
?> 

// Other php or html or related content relating to the page 

<?php 
    require_once('inclues/.../footer.php'); 
?> 

tôi đã tự hỏi những gì có thể tương tự trong Node.js - Tôi đang tìm kiếm một cách để thực hiện điều này là như đơn giản, nhanhđơn giản càng tốt.

Nếu câu trả lời không đơn giản, tôi rất thích một đề xuất về sách, tôi không ngại đọc.

Tôi thích lập trình dựa trên sự kiện, tôi thực sự yêu thích khả năng của JavaScript và tôi thực sự vui mừng về Node.js. Tôi muốn tìm hiểu làm thế nào để phát triển loại công cụ này với nó đúng cách ngay từ đầu.

+3

Tôi cũng muốn chỉ ra rằng việc kiểm tra mã của bạn bằng cách sử dụng ví dụ như mocha -> https://github.com/visionmedia/mocha là rất quan trọng. Tạo mã mô-đun nhỏ được thử nghiệm (mô-đun). – Alfred

+0

Bạn cũng có thể xem Erlang hỗ trợ đồng thời theo mặc định, nhanh hơn node.js và dễ hơn nói C hoặc Java. –

Trả lời

179

Để bắt đầu với tin xấu: Vì Node.js là một kỹ thuật khá trẻ, tôi nghĩ bạn sẽ thấy rằng việc tạo ra một trang web chính thức và duy trì/vận hành nó sẽ rất khác với những gì bạn đang sử dụng đến.

Josh3736 thêm: Khi bạn tìm hiểu cách Node.js và các gói khác nhau của nó (Kết nối, Express) hoạt động, tôi thấy rằng bạn có thể phát triển các trang mới rất nhanh.

Cạnh gồ ghề hiện có trong Node.js, kết hợp với tốc độ phát triển nhanh và tất cả các mô đun liên quan có thể làm phức tạp mọi thứ và làm mọi việc đơn giản hơn, nhanh chóng và đơn giản hơn bạn muốn.

Có đó ra khỏi con đường, đây là tin tốt:

Các Node Package Manager, NPM có rất nhiều công cụ tốt và khuôn khổ để mở rộng chức năng xương trần Node.js của, làm cho nó phù hợp để tạo ra một máy chủ web.

Đáng chú ý nhất sẽ là Express Framework chứa hầu hết mọi thứ bạn cần để chạy máy chủ web (bao gồm cookie, phiên và định tuyến đường dẫn). Ngoài ra Express hỗ trợ partials, mà chăm sóc đầu trang và chân trang của bạn bao gồm.

Express được xây dựng trên đầu trang của Sencha's Connect. Cookie và phiên thực sự được cung cấp bởi Connect. Express là những gì đơn giản hóa việc định tuyến của bạn và xử lý các khung nhìn/partials. Vì vậy, nếu bạn không cần tất cả chuông và còi đi kèm với Express bạn chỉ có thể đi cho Connect thay thế.

Nếu bạn muốn sử dụng mẫu cho các partials này, Jade Template Engine có thể tăng tốc cho bạn. Mặc dù Josh3736 chỉ ra rằng Jade là chậm và khoảng trắng đáng kể. Bạn có thể tìm thấy tổng quan đầy đủ hơn here, bao gồm số yêu thích của mình, doT. (Cá nhân tôi chỉ sử dụng Node.js cho các ứng dụng dựa trên socket.io, vì vậy anh ấy là một nguồn tốt hơn tôi khi nói đến việc tạo khuôn mẫu).

Bạn có thể kết nối với MySQL từ Node.js bằng mô-đun db-mysql, nhưng nếu bạn không cần điều đó vì bạn đang truy cập dữ liệu được kết nối với hệ thống đã có, tôi khuyên bạn nên sử dụng nhiều hơn. .. phương pháp tiếp cận 'hiện đại', là sử dụng cơ sở dữ liệu NoSQL vì hầu hết các dự án Node.js dường như làm. MongoDB qua Mongoose là cách phổ biến để sử dụng.

Hoặc nếu nó chỉ lưu trữ các đối tượng bạn quan tâm, chỉ cần thay thế Redis (có thể bạn sẽ cần đến một số điểm).

Khi trang web của bạn hoàn tất, bạn sẽ phải triển khai và đảm bảo trang web tiếp tục chạy. Có nhiều cách để làm như vậy, như sử dụng hỗ trợ cụm dựng sẵn hoặc sử dụng mô-đun n232 forever thân thiện với tính năng hơn. See this SO question of mine for more information.

Kết luận:

Những gì tôi đang cố gắng để có được ở đây là:

Yêu cầu những gì các thực hành tốt nhất để xây dựng một trang web trong Node.js được, là về giống như hỏi gì cách tốt nhất để xây dựng một trang web bằng PHP là: 100 nhà phát triển sẽ cung cấp cho bạn 100 câu trả lời khác nhau.

NPM được ban phước với một loạt các khung công tác tuyệt vời giúp đơn giản hóa rất nhiều công việc liên quan, nhưng tất cả đều dựa trên sở thích, đó là cách thực sự.

Như tôi đã nói, Node.js vẫn là một kỹ thuật khá trẻ, do đó, không có khung công cụ hoặc công cụ bổ sung nào xuất hiện dưới dạng 'tiêu chuẩn defacto'; đối với hầu hết mọi thứ bạn đang cố gắng thực hiện, có thể có nhiều lựa chọn thay thế và mong đợi mã của bạn bị hỏng khi sử dụng hầu hết trong quá trình cập nhật, vì việc phát triển Node.js và hầu hết các mô-đun đều có nhịp độ nhanh. Bạn sẽ phải theo kịp.

Đưa nó tất cả cùng nhau:

Như tôi đã nói, việc sử dụng sản xuất chính của tôi cho Node.js là để có thể sử dụng socket.io, vì vậy tôi không có bất kỳ ví dụ sản xuất tốt hiện nay (Và khi tôi chuẩn bị rời đi trong một kỳ nghỉ xứng đáng, tôi cũng không có thời gian để cùng nhau đi cùng nhau).Có một số ví dụ tốt mặc dù:

Một lần nữa, con đường để đi (và sau đó là các ví dụ để làm theo) phụ thuộc rất lớn vào mục tiêu cuối cùng của bạn và kỹ thuật được lựa chọn, nhưng may mắn có rất nhiều nguồn lực sẵn có cho tất cả các lựa chọn có sẵn. Hầu hết các mô-đun đều sử dụng các kho lưu trữ GitHub được tài liệu hóa tốt và bao gồm các ví dụ kết hợp với các mô-đun phổ biến nhất (Xem thư mục /examples/ dường như có mặt trong hầu hết các kho lưu trữ).

Chúc may mắn! (Và nhờ Josh3736 để sửa lỗi của tôi.)

+2

Cảm ơn rất nhiều, chỉ là những gì tôi đang tìm kiếm! Chỉ một điều ngắn nữa, tôi tự hỏi làm thế nào một số mã tương tự với mã tôi đã mô tả trong tiêu đề có thể tìm trong node.js? Làm cách nào để phân tách hợp lý hoạt động? Giả sử tôi sử dụng express và jade với railyway.js. Tôi vẫn đang đấu tranh để hiểu chương trình của tôi trông như thế nào. Nếu ví dụ (đơn giản) tôi có tệp index.php tải và hiển thị dữ liệu cơ bản từ cơ sở dữ liệu và bao gồm tệp chân trang/đầu trang, cách sắp xếp mã đó trông như thế nào (tối ưu)? Một lần nữa, cảm ơn rất nhiều –

+6

Đây là một câu trả lời hay, nhưng một vài điểm: Express thực sự được xây dựng * trên đầu * của Kết nối. Cookie và phiên thực sự được cung cấp bởi Connect. Express là những gì đơn giản hóa việc định tuyến của bạn và xử lý các khung nhìn/partials. Jade là * cực kỳ * chậm và (trên một lưu ý cá nhân) Tôi ghét các ngôn ngữ không gian quan trọng. Hãy xem [một số động cơ templating khác] (https://github.com/joyent/node/wiki/Modules#wiki-templating) - yêu thích của tôi là doT, đó là [nhanh] (http: // jsperf.com/dom-vs-innerhtml-based-templating/53). – josh3736

+4

Cuối cùng, tôi sẽ không nói rằng sử dụng Node là "tất cả mọi thứ nhưng đơn giản, nhanh chóng và đơn giản" - nó chỉ rất khác so với những gì bạn đang sử dụng. Một khi bạn tìm ra cách Node và các gói khác nhau của nó (Connect, Express) làm việc, tôi đã tìm thấy rằng bạn có thể phát triển các trang web mới * rất nhanh chóng. Có, vẫn còn các cạnh thô, nhưng trên toàn bộ bạn có thể làm những việc đơn giản và nhanh chóng. – josh3736

Các vấn đề liên quan