Tôi đang cố tạo một API nút thực sự đơn giản bằng cách sử dụng express.js 4 nhưng tôi cần một vài sự kiện 'thời gian thực' mà tôi đã thêm socket.io. Tôi khá mới cho cả hai vì vậy tôi có thể thiếu một cái gì đó cơ bản nhưng tôi không thể tìm thấy tài liệu tốt/tuts về điều này.express.js 4 và ổ cắm với bộ định tuyến nhanh
Trong ứng dụng nhanh (được tạo bằng trình tạo tốc độ nhanh), tôi có một cái gì đó như thế này dựa trên các ví dụ đơn giản và tài liệu dự án mà tôi đã đọc. Này hoạt động OK và từ các ứng dụng khách hàng, tôi có thể gửi/nhận các sự kiện ổ cắm:
var express = require('express');
var path = require('path');
var logger = require('morgan');
var api = require('./routes/api');
var app = express();
var io = require('socket.io').listen(app.listen(3000));
app.use(logger('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/api', api);
io.sockets.on('connection', function (socket) {
console.log('client connect');
socket.on('echo', function (data) {
io.sockets.emit('message', data);
});
});
// error handlers omitted
module.exports = app;
nhưng tôi muốn sử dụng ổ cắm từ đường API của tôi (trong file ./routes/api.js mà tôi yêu cầu ' ở trên). Ví dụ, ai đó có thể sử dụng API để PUT/POST một tài nguyên và tôi muốn phát sóng đó cho các máy khách socket.io được kết nối.
Tôi không thể xem cách sử dụng biến 'io' hoặc sắp xếp mã hiện tại trong hàm io.sockets.on('connection' ...
bên trong các tuyến đường tốc hành. Đây là tệp ./routes/api.js
:
var express = require('express');
var router = express.Router();
var io = ???;
router.put('/foo', function(req, res) {
/*
do stuff to update the foo resource
...
*/
// now broadcast the updated foo..
io.sockets.emit('update', foo); // how?
});
module.exports = router;
Cảm ơn Caner. Điều đó hoạt động và với một vài chỉnh nhỏ tôi có thể sử dụng vì ứng dụng cụ thể này khá đơn giản. Nhưng khi tôi đang cố gắng sử dụng nó để tìm hiểu một số phương pháp hay nhất, có cách nào để tiếp tục sử dụng Bộ định tuyến nhanh() không? Điều đó có vẻ là cách thành ngữ để diễn đạt 4.x. – darrend
@darrend, theo tài liệu express.js có vẻ như không sao nếu sử dụng như vậy http://expressjs.com/api.html, bạn nghĩ sao? – cdagli
Điều đó là hợp lý - Tôi sẽ đánh dấu là được chấp nhận và đào sâu vào tài liệu và mã một số chi tiết. Cảm ơn đã giúp đỡ. – darrend