Различные сообщения об ошибках между базой данных на герою и локальной - PullRequest
0 голосов
/ 14 марта 2019

У меня возникла следующая проблема:

Я использую sequelize для создания моей модели. Когда я внедряю его в heroku, я получаю свое сообщение об ошибке, которое я определил с помощью sequelize

var User = connection.define(
    "user",
    {
        username: {
            type: Sequelize.STRING,
            unique: {
                args: true,
                msg: "Username already taken"
            },
            allowNull: false
        },
        email: {
            type: Sequelize.STRING,
            unique: {
                args: true,
                msg: "Email already taken"
            },
            allowNull: false,
            validate: {
                isEmail: {
                    args: true,
                    msg: "Invalid email"
                }
            }
        },

Когда мое приложение работает на heroku, я получаю это сообщение об ошибке «Имя пользователя уже занято», когда я пытаюсь создать пользователей с тем же именем пользователя в своей обработке ошибок «try catch block» Но когда я пытаюсь сделать это на моей локальной машине, это сообщение об ошибке не работает.

минимальный пример кода:

try {
  var user = await sequelize.models.user.create(args);
} catch (error) {
    console.log("createUser error:", error);            
}

когда я запускаю свой код локально, я получаю следующий вывод из console.log ():

createUser error: { SequelizeUniqueConstraintError: doppelter Schlüsselwert verletzt Unique-Constraint »users_username_key«
at Query.formatError (/home/whatever/NodeApps/MyStuff/testapp/node_modules/sequelize/lib/dialects/postgres/query.js:328:16)
at query.catch.err (/home/whatever/NodeApps/MyStuff/testapp/node_modules/sequelize/lib/dialects/postgres/query.js:86:18)
at tryCatcher (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/promise.js:690:18)
at _drainQueueStep (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/async.js:138:12)
at _drainQueue (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/async.js:131:9)
at Async._drainQueues (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/async.js:147:5)
at Immediate.Async.drainQueues [as _onImmediate] (/home/whatever/NodeApps/MyStuff/testapp/node_modules/bluebird/js/release/async.js:17:14)
at processImmediate (timers.js:637:19)
name:'SequelizeUniqueConstraintError',
errors: {},
fields: undefined,

на Герою, я получаю это:

createUser error: { SequelizeUniqueConstraintError: Username already taken
at Query.formatError (/app/node_modules/sequelize/lib/dialects/postgres/query.js:325:18)
at query.catch.err (/app/node_modules/sequelize/lib/dialects/postgres/query.js:86:18)
at tryCatcher (/app/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/app/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/app/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/app/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/app/node_modules/bluebird/js/release/promise.js:690:18)
at _drainQueueStep (/app/node_modules/bluebird/js/release/async.js:138:12)
at _drainQueue (/app/node_modules/bluebird/js/release/async.js:131:9)
at Async._drainQueues (/app/node_modules/bluebird/js/release/async.js:147:5)
at Immediate.Async.drainQueues [as _onImmediate] (/app/node_modules/bluebird/js/release/async.js:17:14)
at processImmediate (timers.js:637:19)
name: 'SequelizeUniqueConstraintError',
errors:
[ ValidationErrorItem {
message: 'Username already taken',
type: 'unique violation',
path: 'username',
value: 'testuser',
origin: 'DB',
instance: [user],
validatorKey: 'not_unique',
validatorName: null,
validatorArgs: [] } ],
fields: { username: 'testuser' },

поэтому для сравнения ошибка объект пуст и поля undefined

Я просто снова отправил весь свой код на heroku, чтобы убедиться, что мой локальный код совпадает с тем, который работает на heroku.

Теперь мне интересно, почему мое пользовательское сообщение не работает с моей локальной базой данных. Если вам нужна дополнительная информация, дайте мне знать:)

1 Ответ

0 голосов
/ 21 марта 2019

Судя по разнице номеров строк в двух трассировках, кажется, что у вас есть разные версии библиотеки sequelize локально и в Heroku:

Локально, у вас возникла ошибка в:

...sequelize/lib/dialects/postgres/query.js:328:18

В Heroku по адресу:

...sequelize/lib/dialects/postgres/query.js:325:18

Это говорит о том, что это не те же версии библиотеки - вы можете попробовать обновить ее локально или каким-то образом обеспечить установкуодна и та же версия в обоих местах.

...