Javascript 服务器已向客户端发送消息,但该消息未显示在控制台中
我使用nodejs作为服务器。Usinf socket.io我想在数据库表中插入新数据时刷新图表 这是在表中添加数据的服务器代码。在数据库中添加数据后,我向客户端发送一条消息以更新图表Javascript 服务器已向客户端发送消息,但该消息未显示在控制台中,javascript,node.js,web-services,socket.io,Javascript,Node.js,Web Services,Socket.io,我使用nodejs作为服务器。Usinf socket.io我想在数据库表中插入新数据时刷新图表 这是在表中添加数据的服务器代码。在数据库中添加数据后,我向客户端发送一条消息以更新图表 app.post('/usersacces/add', function (req,res) { var response = []; if (typeof req.body.alias!== 'undefined' &&typeof req.body.nom!== 'undef
app.post('/usersacces/add', function (req,res) {
var response = [];
if (typeof req.body.alias!== 'undefined' &&typeof req.body.nom!== 'undefined' ) {
var alias = req.body.alias, nom = req.body.nom;
connection.query('INSERT INTO administration_users_niveaux_acces (alias, nom) VALUES (?, ?)',
[alias, nom],
function(err, result) {
if (!err){
if (result.affectedRows != 0) {
response.push({'result' : 'success'});
} else {
response.push({'msg' : 'No Result Found'});
}
// When a client connects, we note it in the console
io.sockets.on('connection', function (socket) {
socket.emit('message', 'You are connected!');
console.log('message '+ 'You are connected!');
});
res.setHeader('Content-Type', 'application/json');
res.status(200).send(JSON.stringify(response));
} else {
res.status(400).send(err);
}
});
} else {
response.push({'result' : 'error', 'msg' : 'Please fill required details'});
res.setHeader('Content-Type', 'application/json');
res.status(200).send(JSON.stringify(response));
}
});
这就是客户端,它应该接收消息并更新图表。但是,当单击按钮在数据库中添加新数据时,图表不会更新,并且向服务器发送的消息不会显示在控制台中。它仅在我加载页面时显示
socket.on('message', function(message) {
var databa = [];
$.ajax({
url: '/usersacces'
})
.done(function(data) {
for (var i = 0, len = data[0].items.length; i < len; i++) {
var e1 = data[0].items[i].id;
databa.push(e1);
}
myChart.data.datasets[0].data = databa;
myChart.update();
}).always(function() {
console.log(1);
});
console.log('The server has a message for you: ' + message);
});
socket.on('message',函数(message){
var-databa=[];
$.ajax({
url:“/usersacces”
})
.完成(功能(数据){
对于(变量i=0,len=data[0]。items.length;i
问题在于,您的套接字仅在用户连接时发出消息,而不会创建任何其他“事件”供套接字侦听。因此,代码的逻辑有点混乱。前端在收到消息时发出http请求。但是,套接字服务器是在后端接收http请求时创建的。你的问题是由逻辑引起的
当我在node.js中使用socket.io时,我总是在定义服务器时声明socket,如下所示:
io.on("connection", (socket) => {
console.log("A user connected");
// Trigger an event when receive a message
socket.on("event1", (data, callback) => {
});
// Emit a message when server did something
// I used amqp to communicate within backend server
// You can simply pass socket to wherever you want to emit the message
amqpReceiver("event2" + socket.id, (msg) => {
socket.emit("event2", msg);
});
// This is an emit example for you
// Having a service claimed here makes your code hard to read
// You can find a lot of ways to pass your socket
app.post("/usersacces/add", function (req, res) {
// Emit message during service process
socket.emit("event3", msg);
});
});
socket.on("event3", (message) => {
console.log(message);
})
// Make request outside of socket.on callback
$.ajax({ url: "/usersacces" })
.done(function(data) {})
然后在前端,我会听到这样的事件:
io.on("connection", (socket) => {
console.log("A user connected");
// Trigger an event when receive a message
socket.on("event1", (data, callback) => {
});
// Emit a message when server did something
// I used amqp to communicate within backend server
// You can simply pass socket to wherever you want to emit the message
amqpReceiver("event2" + socket.id, (msg) => {
socket.emit("event2", msg);
});
// This is an emit example for you
// Having a service claimed here makes your code hard to read
// You can find a lot of ways to pass your socket
app.post("/usersacces/add", function (req, res) {
// Emit message during service process
socket.emit("event3", msg);
});
});
socket.on("event3", (message) => {
console.log(message);
})
// Make request outside of socket.on callback
$.ajax({ url: "/usersacces" })
.done(function(data) {})
我的代码的逻辑是:
首先设置插座连接,并保持前端和后端监听。然后在需要时触发emit事件
希望对您有所帮助。这样您在执行console.log时不会收到消息('服务器有一条消息给您:'消息)??我看不到您在哪里向客户端发送带有新数据的消息?