Sto cercando di creare un API di nodo davvero semplice utilizzando express.js 4 ma ho bisogno di alcuni eventi "in tempo reale" per i quali ho aggiunto socket.io. Sono abbastanza nuovo per entrambi, quindi mi mancherà probabilmente qualcosa di semplice ma non riesco a trovare buoni documenti/tut su questo.express.js 4 e prese con router express
Nell'app express (creata con il generatore di espressioni) ho qualcosa del genere basato su semplici esempi e documenti di progetto che ho letto. Questo funziona OK e dalle applicazioni client, posso inviare/ricevere gli eventi di socket:
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;
ma voglio utilizzare le prese dai miei percorsi API (nel file ./routes/api.js che richiedono' ' sopra). Ad esempio, qualcuno potrebbe utilizzare l'API per PUT/POST una risorsa e voglio trasmetterla ai client socket.io connessi.
Non riesco a vedere come utilizzare la variabile 'io' o organizzare il codice attualmente nella funzione io.sockets.on('connection' ...
all'interno di percorsi espressi. Ecco il file ./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;
Grazie Caner. Questo funziona e con un paio di modifiche minori che potrei usare in quanto questa particolare app è abbastanza semplice. Ma mentre sto cercando di usarlo per imparare alcune buone pratiche, c'è un modo per continuare a usare il router espresso()? Questo sembra essere il modo idiomatico di esprimere 4.x. – darrend
@darrend, in base ai documenti express.js sembra sia giusto usare come http://expressjs.com/api.html, cosa ne pensi? – cdagli
È ragionevole - Contrassegnerò come accettato e analizzerò i documenti e ne scriverò altri. Grazie per l'aiuto. – darrend