Tôi đang cố gắng chuyển đổi một node.js với ứng dụng khung hiển thị thành thiên thạch. Về cơ bản làm cách ngược của https://github.com/onmodulus/demeteorizerCó cách nào dễ dàng để chuyển đổi ứng dụng Express thành meteor?
Trả lời
Chắc chắn không tự động, nhưng có một loạt các thủ thuật bạn có thể chuỗi với nhau để gần nhận được nó tự động.
Tôi đã trải qua điều đó và đây là tất cả các thủ thuật của tôi cho việc này.
Hãy bắt đầu với tệp .js chính của ứng dụng express của bạn. Cái này bạn cần phải thêm những điều sau ở đầu:
/server/main.js
:
routes = {};
var app = {
get: function(route, foo) {
// routes.get[route] = foo;
routes[route] = foo;
},
all: function(route, foo) {
// routes.all[route] = foo;
routes[route] = foo;
}
};
Tất cả điều này là để xác định app
chức năng bạn cần, và ghi lại các tuyến đường quy định tại một đối tượng, mà chúng tôi sẽ sau sử dụng để xác định các tuyến đường đó bằng cách sử dụng iron-router
. Vì vậy, điều này làm cho chắc chắn rằng mọi thứ như sau được ghi lại trong routes
:
/server/main.js
:
app.get('/show', function(req, res) {
res.render('mytemplate');
});
Đó thực sự là chính lừa. Từ đây trên lao động của nó.
Trong phong cách sao băng tốt, chúng tôi sẽ quấn tất cả các cuộc gọi đường dựng hình thành một sợi, để làm cho họ đồng bộ như mọi thứ khác trên máy chủ sao băng. Để làm được điều đó, chúng ta định nghĩa hàm gói waiter
mà chúng ta có thể tái sử dụng lặp đi lặp lại để bọc các hàm tuyến đường. Và trong khi chúng ta thêm nó, chúng tôi sẽ xoa bóp theo yêu cầu kết nối và phản ứng mà chúng ta sẽ nhận được từ sắt tìm đường khác trên máy chủ sao băng vào res
và req
đối tượng express muốn thấy. Tâm trí bạn: điều này là không hoàn thành bởi bất kỳ căng. Nó chỉ là chữ ký tôi muốn sử dụng từ các đối tượng này.
/server/main.js
:
/** create an sync version for meteor */
waiter = function(foo, req, res) {
var waiter_aux = Meteor._wrapAsync(function(foo, req, res, callback) {
res.set = function(header, value) {
res.setHeader(header, value);
};
res.send = function(codeorhtml, html) {
if (html) {
// two arguments provided, treat as described
res.statusCode = codeorhtml;
} else {
// no code, just html
html = codeorhtml;
}
callback(null, html);
};
res.render = function(name, data, callback) {
callback = callback || function(err, html) {
res.send(html);
};
var html = Handlebars.templates[name](data);
callback(null, html);
};
res.json = function(object) {
res.send(JSON.stringify(object));
}
res.redirect = function(URL) {
res.writeHead(302, {
'Location': URL
});
res.end();
};
req.header = function(x) {
return this.header[x];
};
TemplatesObject = Handlebars.templates;
// these objects need to be extended further
foo(req, res);
});
return waiter_aux(foo, req, res);
};
Cuối cùng, thực sự đối phó: sáng tạo các tuyến đường đối với từng tuyến đường cao tốc theo quy định. Đối với điều này, chúng tôi sẽ sử dụng iron-router. Mã sau sẽ đi qua từng tuyến đường được xác định (được xác định bởi các chức năng app
được xác định lại của chúng tôi và được lưu trữ trong routes
) và quấn nó vào một sợi bằng cách sử dụng waiter
của chúng tôi, dịch vụ này cũng sẽ xử lý giữa các đối tượng this.request
/this.response
và req
và res
ứng dụng giả định.
/routes.js
:
if (Meteor.isServer) {
// create routes for all the app.get's and app.all's in bibbase.js
// (server)
console.log("setting routes:", routes);
_.each(routes, function(foo, route) {
Router.map(function() {
this.route(route, {
path: route,
where: 'server',
action: function() {
this.request.params = this.params;
var html = waiter(foo, this.request, this.response);
if (!this.response.statusCode) {
this.response.statusCode = 200;
}
if (!this.response.getHeader('Content-Type')) {
this.response
.setHeader('Content-Type', 'text/html');
}
this.response.end(html);
}
});
});
});
}
Đây là những điều quan trọng nhất mà tôi đã thực hiện để đạt được những gì bạn đang hỏi về. Tôi chắc rằng tôi đã bỏ lỡ một vài chi tiết ở đây, nhưng điều này sẽ cung cấp cho bạn một ý tưởng.
Cập nhật cho hậu Spacebars (tôi quên phiên bản Meteor đó là):
Để thực hiện việc này, bây giờ bạn cần phải thêm handlebars-server:
meteor add cmather:handlebars-server
đó là một câu trả lời rất ấn tượng! – imslavko
- 1. Cách dễ dàng để chuyển đổi mã c thành x86?
- 2. Có cách nào dễ dàng để chuyển đổi Ứng dụng Android sang IPad, IPhone
- 3. Có cách nào dễ dàng để chuyển đổi văn bản thành HTML trong JavaScript không?
- 4. Có cách nào dễ dàng để chuyển đổi một Boolean thành một số nguyên không?
- 5. Có cách nào dễ dàng để chuyển đổi tiêu chí thành HQL?
- 6. Cách dễ dàng để áp dụng chuyển đổi từ `pandas.get_dummies` thành dữ liệu mới?
- 7. Cách dễ dàng để chuyển đổi bảng dữ liệu thành bảng băm hoặc sqldatareader thành hashtable
- 8. Làm thế nào để chuyển đổi một số nguyên thành một chuỗi một cách dễ dàng?
- 9. Làm cách nào để chuyển đổi bộ sưu tập Cookie thành danh sách chung? Dễ dàng
- 10. Có cách nào dễ dàng để chuyển đổi các lớp C# sang PHP?
- 11. Có cách nào dễ dàng để sử dụng InternalsVisibleToAttribute?
- 12. Cách dễ dàng chuyển đổi từ WinForms sang WPF
- 13. Cách dễ dàng để chuyển đổi exec sp_executesql thành một truy vấn bình thường?
- 14. Có cách nào dễ dàng để chuyển đổi "do/end" và "{}" trong ruby trong Vim?
- 15. Cách dễ dàng để sử dụng FindControl ("")
- 16. Trong Scala, có cách nào dễ dàng để chuyển đổi một lớp chữ thường thành một tuple không?
- 17. LOAD DATA INFILE có thể dễ dàng chuyển đổi YYYYMMDD thành YYYY-MM-DD?
- 18. Dễ dàng chuyển đổi "Xem bộ điều khiển" trong ứng dụng Mac (tương tự như iOS)
- 19. Làm cách nào để chuyển đổi dữ liệu bảng tính thành JSON một cách nhanh chóng và dễ dàng?
- 20. Làm cách nào để ứng dụng C# có thể dễ dàng giao tiếp và chuyển các tệp trên mạng?
- 21. OpenGL vs OpenGL ES 2.0 - Ứng dụng OpenGL có thể được chuyển dễ dàng không?
- 22. Có cách nào dễ dàng để biến một bảng MySQL thành một Redis tương đương?
- 23. Làm thế nào tôi có thể dễ dàng chuyển đổi một ứng dụng Django từ mySQL sang PostgreSQL?
- 24. Chuyển đổi CSS3 Dễ dàng vào và ra Hộp bóng
- 25. Làm cách nào để sử dụng Python để dễ dàng mở rộng các biến thành chuỗi?
- 26. Cách dễ dàng để chuyển đổi LocalDateTime của Java 8 sang LocalDateTime của Joda
- 27. Có cách nào dễ dàng để tự động hoàn thành các biến khối trong xcode?
- 28. Lấy kích thước ứng dụng exe dễ dàng
- 29. Có cách nào dễ dàng hơn để hợp nhất các Biểu mẫu Windows.
- 30. Có cách nào dễ dàng để hoàn nguyên toàn bộ danh sách thay đổi P4 không?
lẽ không ở bất kỳ cách tự động nào như các mô hình xây dựng ứng dụng Express và ứng dụng Meteor đều khác nhau. – imslavko
Tôi không biết những người này đã gắn cờ câu hỏi nào muốn. Đối với tôi, nó khá là chen chúc câu hỏi là gì. Nếu không thì tôi có thể trả lời như thế nào? Một câu hỏi không cần phải dài để được rõ ràng. –