2013-06-12 40 views
14

Có thể sử dụng Mô-đun Npm ở phía máy khách không?Meteor Npm-module phía máy khách?

Cụ thể hơn:

Tôi muốn sử dụng node.js built-in crypto-mô-đun để mã hóa mật khẩu người dùng nhập vào và sau đó gửi các mật khẩu được mã hóa với một chữ ký (/ HMAC) để máy chủ của tôi.

Tôi cần thực hiện theo cách đó, vì tôi phải truy xuất được phía máy chủ mật khẩu ban đầu, vì sau đó tôi sẽ gửi nó tới máy chủ ldap, vì người dùng phải xác thực bằng cùng tên người dùng/mật khẩu anh ta được đăng ký với trên máy chủ đó.

Đây là những gì tôi đã làm:

tạo ra trong gói/crypto /: -package.js:

Package.on_use(function(api) { api.add_files('crypto.js',['server','client']);});

-crypto.js: crypto = Npm.require("crypto");

Nó hoạt động tốt trên máy chủ, nhưng trên máy khách, nó nói "Lỗi tham chiếu: Npm không được xác định". Vì vậy, có thể sử dụng mô-đun mã hóa ở phía máy khách không?

Có cách nào khác để đạt được mục tiêu này không?

Cảm ơn bạn!

Chỉnh sửa: Có cách nào khác để nhận mật khẩu cho máy chủ một cách an toàn để máy chủ có thể truy xuất mật khẩu ban đầu không? Tôi nghĩ rằng làm ldap() - yêu cầu trên client-side (như: if(checkLdap(usrname,password)){<login>} else{fail}) có thể dễ dàng bỏ qua

Trả lời

2

của nó không thể sử dụng module NPM trên các mặt hàng kể từ NPM mô-đun mở rộng qua Node.js mà? chỉ chạy trên máy chủ kết thúc.

Nếu bạn muốn sử dụng một tập tin như crypto bạn sẽ phải thực hiện một mặt hàng duy nhất phiên bản và đặt nó trong /client/lib của ứng dụng Meteor của bạn

trong khi điều này có thể có thể chính thức, Meteor không hỗ trợ điều này.

Bạn sẽ phải bao gồm requirejs theo cách thủ công bằng cách sử dụng dự án này: https://github.com/apendua/require

+0

Ok cảm ơn bạn đã trả lời. –

+2

Nhiều mô-đun npm được thiết kế để có thể sử dụng được trên máy chủ hoặc máy khách, không chỉ máy chủ. – protometa

+0

@protometa nó có thể được nhưng tôi không nghĩ rằng Meteor hỗ trợ điều này mà không cần thêm các công cụ của bên thứ ba như browserify. Chính thức npm, mà meteor phụ thuộc vào, không trực tiếp hỗ trợ các mô-đun phía máy khách sao cho Meteor không làm việc với chúng phía máy khách. Bạn có thể trình duyệt chúng và tự bao gồm chúng như bạn sẽ làm cho bất kỳ dự án nodejs nào khác. – Akshat

13

Bạn có thể thử thêm các tệp js bạn cần trên phía máy khách từ thư mục .npm trong thư mục gói của crypto. Vì vậy, tập tin package.js của bạn có thể trông như thế này:

Package.describe({ 
    summary: 'Description of your crypto package' 
}); 

Npm.depends({ 
    'crypto': '1.0.0' 
}); 

Package.on_use(function (api) { 
    api.add_files('crypto.js', 'server'); 
    api.add_files('.npm/node_modules/crypto/crypto.js', 'client'); 
}); 
+0

Điều này có thể không hoạt động khi nội dung của tệp khách hàng được gói trong cuộc gọi hàm, vì vậy trừ khi các gói này rõ ràng thêm chính họ vào đối tượng cửa sổ toàn cục mà họ sẽ không có sẵn. –

+0

Giải pháp này hoạt động tốt với mọi thư viện tôi đóng gói cho đến nay bởi vì tất cả chúng (và imho 99% số khác) rõ ràng tự thêm vào đối tượng cửa sổ chung. – th0r

+0

Cảm ơn ... đang tìm cách tốt hơn để làm điều này, nhưng điều này sẽ làm ngay bây giờ. –

1

Bạn có thể sử dụng browserify để xây dựng một bó .js với tất cả tất cả các module NPM bạn muốn trên các mặt hàng. Xem:

2013 Meteor NPM Packages

5

Bạn có thể sử dụng https://github.com/elidoran/cosmos-browserify tại kho lưu trữ này. Tôi đã sử dụng gói bọc trước và đó là nỗi đau thực sự để cập nhật chúng và tạo ra những cái mới. Bây giờ với hỗ trợ trình duyệt, tôi có thể bao gồm thư viện chỉ với một vài dòng mã. Xem ví dụ của họ làm thế nào để làm điều đó. Tôi không xuất bản ở đây vì nó có thể thay đổi.

+0

Tôi đã thử điều này, nó rất đơn giản và nó hoạt động tốt. Được đề xuất! Làm theo hướng dẫn trong tiêu đề "Sử dụng trong ứng dụng Meteor". – joeytwiddle