2012-01-09 41 views
5

Tôi đang lập kế hoạch viết một ứng dụng web kiểu cột sống/backbone.js, về cơ bản chỉ chuyển một tệp application.js lớn tới trình duyệt của khách hàng, giao tiếp với phần phụ trợ node.js bằng ajax. Vấn đề là tôi không biết làm thế nào để cấu trúc một dự án như vậy, vì tôi chưa bao giờ thấy các ví dụ về một ứng dụng như vậy. Tôi có thể hình dung một số ưu và nhược điểm với các cách khác nhau để thực hiện việc nàyLàm cách nào để tôi viết một ứng dụng web node.js với cả mã phía máy chủ và máy khách?

  • Giữ mọi thứ trong một thư mục dự án. Cả hai phía máy chủ và mã phía máy khách cư trú trong cùng một thư mục có nghĩa là họ có thể chia sẻ tài nguyên như xác nhận đầu vào biểu mẫu và tệp ngôn ngữ. Điều này có vẻ giống như một giải pháp tốt, nhưng tôi không có đầu mối làm thế nào tôi sẽ gói chỉ mã mà khách hàng cần, và không phải là mã máy chủ. Chỉ cần nói chung tôi không biết làm thế nào để thực hiện điều này. Nếu nó đã được thực hiện trước đây, tôi muốn xem một số mã mẫu, có lẽ ngay cả một git repo

  • Tạo hai dự án riêng biệt. Một cho khách hàng và một cho máy chủ. Điều này có vẻ đơn giản hơn và thẳng tiến hơn, nhưng không phải là thanh lịch khi nói đến việc chia sẻ tài nguyên. Tôi sẽ phải viết mã như xác nhận đầu vào biểu mẫu hai lần.

Bạn nghĩ gì?

Trả lời

3

Tình huống đầu tiên của bạn là một tình huống rất phức tạp và tôi cho rằng chúng tôi chưa hoàn toàn ở đó. Một số người cho rằng có ít lý do để cố gắng đạt được điều đó, vì các đầu trước/sau sẽ luôn được giao nhiệm vụ một chút và đôi khi là các nhiệm vụ khác nhau đáng kể. Các thư viện như derby hiển thị lời hứa nhưng chưa hoàn toàn có.

Tôi đã thảo luận điều này gần đây với một người bạn và chúng tôi đi đến kết luận rằng có lẽ đặt cược tốt nhất hiện nay sẽ là sắp xếp các mô hình trên websockets, và sau đó đảm bảo rằng máy chủ nút và ứng dụng khách sẽ được đồng bộ hóa.

Tôi có thể làm việc trên một thư viện như vậy, nhưng hiện tại tôi vẫn đang phát triển với 2 thư mục và bản sao của các mô hình ở cả hai bên. Đánh dấu bố trí được gửi từ máy chủ, với tất cả các nội dung khác được hiển thị phía máy khách sau khi nhận được JSON từ máy chủ. Thành thật mà nói, số lượng nhân bản không thực sự đáng kể. Một chút khó chịu nhưng cũng duy trì sự linh hoạt lớn hơn để phát triển theo các hướng khác nhau.

+0

Tôi đồng ý với bạn. Tôi sẽ thay đổi câu trả lời được chấp nhận của tôi nếu chủ đề này thay đổi nhiều trong những tháng/năm tới và câu trả lời hay hơn sẽ xuất hiện – Hubro

0

Đây không phải là câu trả lời hoàn chỉnh cho câu hỏi của bạn, nhưng một thư viện có thể hữu ích nếu bạn chọn theo đuổi nỗ lực đó có thể là Browserify.

Được thiết kế để bạn có thể sử dụng hàm require() tương tự với tiền được xử lý hoặc được tạo trực tiếp từ nguồn mô-đun, tệp js chứa nhiều mô-đun khác nhau. Các mô đun này có thể được chia sẻ với phía máy chủ thông qua cùng cơ chế require().

Tôi không biết sự bùng nổ của Backbone được thực hiện ở phía máy chủ như một phần phía máy chủ để đồng bộ hóa mô hình, có vẻ như là mục tiêu đầu tiên bạn đang tìm kiếm, mã aloowing có ý nghĩa để chia sẻ, chẳng hạn như các mô hình và xác thực, để được chia sẻ một cách hữu ích. Một điều cần xem xét là requirejs, sử dụng nhiều thẻ script truyền thống không đồng bộ tải các mô đun fs js, nhưng cũng hoạt động trong node.js để loại bỏ các mô-đun AMD giống nhau để được chia sẻ giữa mã nút và mã khách.

0

Đã yêu cầu thời gian thực? Nếu không thì cách tiếp cận Derby có thể hơi quá nặng.Express.js đề xuất một cấu trúc trong đó client js được tách ra trong thư mục công cộng và cung cấp các phương thức để chạy RESTful API nhanh chóng, sau đó bạn có thể truy cập với application.js của mình. Tôi đoán bạn có thể tải các tệp js "cổ điển" từ công khai vào nút qua eval().

0

Mọi thứ đã chuyển nhiều về phía trước bây giờ, và những thứ như

browserify mã hóa ảnh hưởng có thể giúp chúng ta đạt được điều này một cách dễ dàng

sẽ luôn có một số mã bất thường giữa máy chủ và máy khách bên, Nhưng mục tiêu phải luôn luôn được để giữ tất cả các mã logic trong các mô-đun khác nhau (sau này được sử dụng từ cả hai môi trường). Điều này là tốt hơn từ điểm TDD của xem là tốt, cũng giữ số bàn phím báo chí của bạn để ít hơn.

Hãy nhìn vào những thứ như ngăn xếp này - http://mindthecode.com/lets-build-an-angularjs-app-with-browserify-and-gulp/

Có nói rằng option1 của bạn không có vẻ rằng quản lý đối với tôi, nếu bạn có lập trình đúng mã hóa mã đúng.

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