Я работаю с node.js всего 2 дня. Я пытаюсь вставить данные mysql, когда socket.io получает и запрашивает.
Мой код выглядит следующим образом:
var http = require('http');
var express = require('express'),
app = module.exports.app = express();
var server = http.createServer(app);
var dateFormat = require('dateformat');
var mysql = require('mysql');
var io = require('socket.io').listen(server); //pass a http.Server instance
server.listen(3000); //listen on port 80
var con = mysql.createConnection({
host: "localhost",
user: "user",
password: "pass",
database: "db"
});
con.on('error', function (err) {
console.log('caught this error: ' + err.toString());
});
io.on('connection', function (socket) {
socket.emit('userId',{userId:socket.id});
socket.on('messages', function (data) {
var d=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");
var date = d.toString();
var sql = "INSERT INTO messages (id, sender, receiver, message, time) VALUES ('', '"+data.sender+"', '"+data.receiver+"', '"+data.text+"', '"+date+"')";
con.query(sql, function (err, result) {
if (err) throw err;
console.log("1 record inserted");
});
let messageObj = {
_id: data.id,
text: data.text,
createdAt: new Date(),
user:{
_id: 1
}
};
console.log('messageObj => ', messageObj);
socket.broadcast.emit('messages',{'messages':messageObj});
socket.emit('messages',{'messages':messageObj});
});
});
Когда я запускаю этот код, он регистрирует объект сообщения , показывает 1 row inserted
, но на самом деле этого не делает. Даже он закрывает соединение и показывает следующую ошибку:
/root/appdatahandle/server.js:34
if (err) throw err;
^
Error: Cannot enqueue Query after fatal error.
at Protocol._validateEnqueue (/root/appdatahandle/node_modules/mysql/lib/protocol/Protocol.js:212:16)
at Protocol._enqueue (/root/appdatahandle/node_modules/mysql/lib/protocol/Protocol.js:138:13)
at Connection.query (/root/appdatahandle/node_modules/mysql/lib/Connection.js:198:25)
at Socket.<anonymous> (/root/appdatahandle/server.js:33:6)
at Socket.emit (events.js:198:13)
at /root/appdatahandle/node_modules/socket.io/lib/socket.js:528:12
at process._tickCallback (internal/process/next_tick.js:61:11)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! bubblink@1.0.0 start: `node server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the bubblink@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-07-09T16_50_37_946Z-debug.log
Я новичок в node.js и использую mysql с этим. У меня действительно нет идей. Пожалуйста, помогите мне с этим.
Заранее спасибо :)