Các phương pháp hay nhất để xây dựng một trang web bằng Node.js


79

Tôi đã tự hỏi làm thế nào để phát triển một trang web từ đầu với Node.js. Tôi hiểu làm thế nào tôi có thể làm điều đó, nhưng tôi quan tâm đến phương pháp thiết kế tốt nhất .

Tôi cần trang web lý thuyết này để:

  1. Thực hiện nhiều AJAX
  2. Hãy rất thẳng thắn
  3. Tương đối nhỏ
  4. Kết nối với ... giả sử máy chủ MySQL

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

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

Sau đó, PHP chỉ cho phép bạn tạo các trang và bao gồm các tệp này lại với nhau để tạo thành một trang web - tôi có thể làm như sau:

<?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 điều gì có thể tương tự trong Node.js - Tôi đang tìm cách để thực hiện điều này đơn giản , nhanh chóngdễ hiểu nhất có thể.

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

Tôi yêu 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ự hào hứng với Node.js. Tôi muốn học cách phát triển loại công cụ này với nó một cách đúng đắn ngay từ đầu.


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

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

Câu trả lời:


184

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

Josh3736 cho biết thêm: Sau khi bạn tìm ra cách Node.js và các gói khác nhau của nó (Connect, Express) hoạt động, tôi thấy rằng bạn có thể phát triển các trang web mới rất nhanh chóng.

Tuy nhiên, những góc cạnh thô ráp hiện đang tồn tại trong Node.js, kết hợp với tốc độ phát triển nhanh chóng của nó và tất cả các mô-đun liên quan có thể làm phức tạp mọi thứ và khiến mọi thứ trở nên ít đơn giản, nhanh chóng và đơn giản hơn bạn muốn.

Có điều đó không xảy ra, đâ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 là Express Framework chứa hầu hết mọi thứ bạn cần để chạy một máy chủ web (bao gồm cookie, phiên và định tuyến đường dẫn). Ngoài ra Express còn hỗ trợ các phân đoạn, hỗ trợ phần đầu trang và chân trang của bạn bao gồm.

Express được xây dựng trên Sencha's Connect . Cookie và phiên thực sự được cung cấp bởi Connect. Express là thứ đơn giản hóa việc định tuyến của bạn và xử lý các lượt xem / chia nhỏ. 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ể sử dụng Connect.

Nếu bạn thích sử dụng các mẫu cho các phần này, Công cụ Mẫu Ngọc có thể đẩy nhanh tiến độ cho bạn. Mặc dù Josh3736 chỉ ra rằng Jade chậm và có khoảng trắng đáng kể. Bạn có thể tìm thấy tổng quan đầy đủ hơn ở đây , bao gồm doT yêu thích của anh ấy . (Cá nhân tôi chỉ sử dụng Node.js cho socket.iocác ứng dụng dựa trên, vì vậy anh ấy là một nguồn tốt hơn tôi khi nói đến 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 ... 'hiện đại hơn 'cách tiếp cận, đó là sử dụng sở dữ liệu NoSQL như 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 mà bạn quan tâm, thay vào đó chỉ cần sử dụng Redis (thứ mà bạn có thể sẽ cần vào một lúc nào đó).

Khi trang web của bạn hoàn tất, bạn sẽ phải triển khai nó và đảm bảo rằng nó tiếp tục chạy. Có nhiều cách để làm như vậy, chẳng hạn như sử dụng hỗ trợ cụm tích hợp hoặc sử dụng forevermô-đun npm thân thiện với tính năng hơn . Xem câu hỏi SO này của tôi để biết thêm thông tin.

Kết luận :

Điều tôi đang cố gắng đạt được là:

Hỏi cách tốt nhất để xây dựng một trang web trong Node.js là gì, cũng giống như việc hỏi cách tốt nhất để xây dựng một trang web bằng PHP là gì: 100 nhà phát triển sẽ cho bạn 100 câu trả lời khác nhau.

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

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

Kết hợp tất cả lại với nhau :

Như tôi đã nói, mục đích 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 nào hiện tại (Và vì tôi sắp rời đi trong một kỳ nghỉ xứng đáng, tôi không có ' t có thời gian để ghép một cái lại với nhau). Tuy nhiên, có một số ví dụ điển hình:

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

Chúc may mắn! (Và cảm ơn Josh3736 đã sửa lỗi cho tôi.)


2
Cảm ơn rất nhiều, đúng những gì tôi đang tìm kiếm! Chỉ một điều ngắn gọn nữa, tôi đang tự hỏi làm thế nào một số mã tương tự như mã mà tôi đã mô tả trong tiêu đề có thể trông như thế nào trong node.js? Cách phân tách hợp lý sẽ hoạt động như thế nào? 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 mình trông như thế nào. Nếu đối với (một ví dụ đơn giản), tôi có một 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 các tệp chân trang / đầu trang, thì loại mã đó sẽ trông như thế nào (tối ưu)? Một lần nữa, cảm ơn rất nhiều
Benjamin Gruenbaum

6
Đây là một câu trả lời hay, nhưng có một số điểm: Express thực sự được xây dựng dựa trên Connect. Cookie và phiên thực sự được cung cấp bởi Connect. Express là thứ đơn giản hóa việc định tuyến của bạn và xử lý các lượt xem / chia nhỏ. Jade cực kỳ chậm và (trên lưu ý cá nhân) tôi ghét những ngôn ngữ có khoảng trắng. Hãy xem một số công cụ tạo khuôn mẫu khác - công cụ yêu thích của tôi là doT, tốc độ nhanh .
josh3736

4
Cuối cùng, tôi sẽ không nói rằng việc sử dụng Node là "mọi thứ nhưng đơn giản, nhanh chóng và dễ hiểu" - nó rất khác so với những gì bạn đang sử dụng. Khi bạn đã tìm ra cách hoạt động của Node và các gói khác nhau của nó (Connect, Express), tôi thấy rằng bạn có thể phát triển các trang web mới rất nhanh chóng. Vâng, vẫn còn những góc cạnh thô, nhưng nhìn chung, bạn có thể thực hiện mọi thứ một cách đơn giản và nhanh chóng.
josh3736

2
Remco, tôi cũng muốn có một số tham chiếu đến nhận xét cuối cùng của tôi, nếu bạn giải thích cách tôi sẽ triển khai nút bằng cách sử dụng đã nói (sử dụng tốt, ngay cả khi không tốt nhất, hãy thực hành), tôi sẽ đánh dấu câu trả lời này. Đây là điều cuối cùng khiến tôi khó chịu và tôi đang vật lộn với giai đoạn cuối cùng này, một lần nữa, cảm ơn.
Benjamin Gruenbaum

3
Tôi đã tổng hợp lại ví dụ từ đầu đến cuối này về cách tạo một trang web ngăn xếp đầy đủ bằng cách sử dụng ngăn xếp MEAN (MongoDb, Express, Angular & Node). Bạn có thể thay thế Angular hoặc ứng dụng khách bằng bất cứ thứ gì bạn quen thuộc. Tôi đã được cho biết đây là video giới thiệu tốt nhất trên mạng, vì vậy có lẽ nó sẽ giúp những người khác bắt đầu youtube.com/watch?v=AEE7DY2AYvI
Michael Moser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.