我在服务器端拥有这个非常基本的脚本app.js
:
const {app, apiEvents} = require('./server.js');
const http = require('http');
const server = require('http').createServer(app).listen(8080);
const io = require('socket.io').listen(server);
function connected(socket) {
console.log('a user connected');
}
apiEvents.on('db-event', (data) => {
console.log(`Received event:%s`,data);
io.emit ('update', msg);
});
io.sockets.on('connection',(socket) => {connected(socket);});
这是客户端:
// Test client
const io = require('socket.io-client');
const socket = io.connect('http://localhost:8080',(socket) => {
});
socket.on('connect', function(){
socket.on ('update', function (msg) {
console.log (msg);
});
});
server.js
只是Express中基本路由的包装。当我连接到localhost:8080:/api
时,将触发数据库事件。
const createError = require('http-errors');
const express = require('express');
const path = require('path');
//const logger = require('morgan');
const { apiRouter, apiEvents} = require('./routes/api');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use('/api', apiRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
});
module.exports = {app, apiEvents};
这是routes/api.js
const express = require('express');
const EventEmitter = require('events').EventEmitter;
const apiEvents = new EventEmitter();
const apiRouter = express.Router();
apiRouter.get('/', function(req, res, next) {
console.log("Received query%s",req.query);
res.sendStatus(200);
apiEvents.emit('db-event',req.query);
});
module.exports = {apiRouter, apiEvents};
当我赚curl http://localhost:8080/api\?operation=pippo
时
我在服务器上看到了日志:
Received query { operation:'pippo' }
Received event:{ operation: 'message', user: 'pippo' }
但是在客户端什么也没有写出来。为什么?