У меня возникла следующая проблема:
Я использую 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.
Теперь мне интересно, почему мое пользовательское сообщение не работает с моей локальной базой данных. Если вам нужна дополнительная информация, дайте мне знать:)