node-postgres: done() — undefined не является функцией

У меня возникла проблема с функцией запроса, использующей node-postgres.

Выбор, вставка и удаление успешно выполняют запрос к базе данных, но вставки и удаления вызывают эту ошибку на сервере узла:

/vagrant/catalog/database/db.js:11
                done();
                ^
TypeError: undefined is not a function
    at null.callback (/vagrant/catalog/database/db.js:11:17)
    at p.handleReadyForQuery (/vagrant/catalog/node_modules/pg/lib/query.js:78:10)
    at null.<anonymous> (/vagrant/catalog/node_modules/pg/lib/client.js:111:24)
    at emit (events.js:117:20)
    at Socket.<anonymous> (/vagrant/catalog/node_modules/pg/lib/connection.js:47:12)
    at Socket.emit (events.js:95:17)
    at Socket.<anonymous> (_stream_readable.js:765:14)
    at Socket.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:427:10)
    at emitReadable (_stream_readable.js:423:5)

Вот функция запроса:

var pg = require('pg');
var connectionString = 'postgres://vagrant:vagrant@localhost:5432/catalog';

module.exports = {
    query: function(text, values, callback) {
        pg.connect(connectionString, function(err, client, done) {
            client.query(text, values, function(err, result) {
                if (err) throw err;
                done();
                callback(err, result);
            });
        });
    }
};

Который вызывается конечными точками, такими как:

app.delete(api + '/games/:id', function(req, res) {
    query('DELETE FROM videogame WHERE id=$1', [req.params.id], function(err, result) {
        if (err) throw err;
        return res.json({'success': true});
    });
});

Любая идея, что вызывает это?


person mysterpaul    schedule 04.08.2015    source источник
comment
Какую версию pg вы используете?   -  person robertklep    schedule 04.08.2015
comment
Нет проверки на err при подключении, возможно done не предусмотрено в случае ошибки   -  person Kirill Slatin    schedule 04.08.2015
comment
@KirillSlatin да, это тоже было мое первое предположение, но в этом случае client.query() тоже не сработает (я проверял).   -  person robertklep    schedule 04.08.2015
comment
@robertklep [email protected]   -  person mysterpaul    schedule 04.08.2015
comment
Последний раз @mysterpaul 4.4.1   -  person robertklep    schedule 04.08.2015
comment
@robertklep, ты прав. Просто нашел это в источниках. При возникновении ошибки предусмотрена функция noop. Так что не должно быть undefined   -  person Kirill Slatin    schedule 04.08.2015
comment
@robertklep Только что обновился до 4.4.1, теперь появляется другая ошибка, даже при SELECT - теперь он думает, что callback() не определено   -  person mysterpaul    schedule 04.08.2015
comment
@mysterpaul похоже, что с вашим кодом что-то еще не так, callback - это функция, которую вы определяете в своем собственном коде.   -  person robertklep    schedule 04.08.2015
comment
@robertklep ах, я просто не обработал отсутствующий средний параметр в операторе select   -  person mysterpaul    schedule 04.08.2015


Ответы (1)


Решение было обновлено до 4.4.1.

person mysterpaul    schedule 04.08.2015
comment
Было ли это причиной проблемы? - ›Я просто не обработал отсутствующий средний параметр в операторе select. Если это так, то это не решение проблемы, которую вы опубликовали. - person vitaly-t; 04.08.2015
comment
Это исправление параметра было причиной проблемы, возникшей с моим SELECT после обновления; обновление было решением исходной проблемы, которая у меня была только для DELETE и INSERT при использовании старой версии. - person mysterpaul; 04.08.2015
comment
Если вам нужен более простой API без использования done(), проверьте pg-promise ;) - person vitaly-t; 05.08.2015