Я написал этот фрагмент кода:
function newExercise(data){
pool.query('INSERT INTO Exercises VALUES(?, ?)', [data, data], function(error, results, field){
if (error) console.info(error);
})
}
module.exports = {
newExercise: newExercise,
}
Но когда я вызываю функцию отсюда:
Promise.all([exname, exdesc])
.then( values => {
router.get('/', function(req, res, next){
var socket = req.app.get('socket');
io = req.app.get('socketio');
io.sockets.on('connection', function(socket){
socket.on('message', function(message){
console.info("Ricevuto");
database.newExcercise(message);
})
})
res.render('exercises', {title: 'Exercises', ex: values[0]});
})
})
.catch(error => console.error(error));
Я получаю "TypeError: database.newExcercise не является функцией", но я не понимаю, почему



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте следующее: module.exports.newExercise = newExercise;
В приведенном выше фрагменте кода вы определили функцию как:
newExercise, а во втором фрагменте вы называете это как newExcercise.
Это простая опечатка.
имя файла NewExercise.js
module.exports = function newExercise(data){
pool.query('INSERT INTO Exercises VALUES(?, ?)', [data, data], function(error, results, field){
if (error) console.info(error);
})
}
в другом файле, где вы вызываете эту функцию, вы просто
var newExercise= require('./NewExercise.js');
и ты просто назови это
newExercise(message)
Для меня решением было удаление круговой ссылки.