Я новичок в node.js, и я пытаюсь получить пароль от пользователя в базе данных, содержащей пары (имя пользователя, пароль). Функция findOne возвращает один результат, но когда я пытаюсь получить пароль, у меня всегда есть «неопределенный» результат. Может кто-нибудь помочь мне с этим, пожалуйста?Node.js/sequelize: Доступ к результату функции findOne()?
Вот очень простой server.js:
var express = require('express');
var app = express();
var sqlite = require('sqlite3');
var port = process.env.PORT || 8000;
var Sequelize = require('sequelize');
var sequelize = new Sequelize("_databaseName_", "_username_", "_password_", {
dialect: 'sqlite',
storage: "users.sqlite"
});
var User = sequelize.define('User',
{
tx_index: { type: Sequelize.INTEGER, primaryKey: true},
username: Sequelize.STRING,
password: Sequelize.STRING
},{
timestamps: false,
tableName: 'data',
freezeTableName: true
})
//no need of sync, as the db already exists and is populated
//User.sync();
User.findOne({where: {username: 'julien'}}).then(function(user) {
if (!user) {
console.log('unknown user');
} else {
console.log('user password is '+user.password);
//console.log('user password is '+user.get('password'));
}
});
app.listen(port);
console.log('listening => http://localhost:' + port);
И выход:
node server.js
listening => http://localhost:8000
Executing (default): SELECT `tx_index`, `username`, `password` FROM `data` AS `User` WHERE `User`.`username` = 'julien' LIMIT 1;
user password is undefined
Если я выбираю другое имя пользователя:
User.findOne({where: {username: 'WHATEVER'}}).then(function(user) {
я на выходе:
node server.js
listening => http://localhost:8000
Executing (default): SELECT `tx_index`, `username`, `password` FROM `data` AS `User` WHERE `User`.`username` = 'WHATEVER' LIMIT 1;
unknown user
Таким образом, запрос кажется ОК, но я не могу получить доступ к паролю (undefined).
Наконец, содержание базы данных:
SELECT * FROM 'data' LIMIT 0,30;
TX_INDEX PASSWORD USERNAME
2 123456 julien
3 titi toto
4 bar foo
SELECT tx_index, username, password FROM data WHERE username = 'julien';
TX_INDEX USERNAME PASSWORD
2 julien 123456
Я схожу с ума на поиске того, что я сделал не так!
:: EDIT ::
При печати объекта пользователя Воли "console.log (пользователь)", вот выход. Что это ? Экземпляр модели «Пользователь», но он пуст?
Instance {
dataValues: {},
_previousDataValues: {},
_changed: {},
'$modelOptions':
{ timestamps: false,
instanceMethods: {},
classMethods: {},
validate: {},
freezeTableName: true,
underscored: false,
underscoredAll: false,
paranoid: false,
rejectOnEmpty: false,
whereCollection: { username: 'julien' },
schema: null,
schemaDelimiter: '',
defaultScope: {},
scopes: [],
hooks: {},
indexes: [],
name: { plural: 'Users', singular: 'User' },
omitNul: false,
tableName: 'data',
sequelize:
Sequelize {
options: [Object],
config: [Object],
dialect: [Object],
models: [Object],
modelManager: [Object],
connectionManager: [Object],
importCache: {},
test: [Object],
queryInterface: [Object] },
uniqueKeys: {},
hasPrimaryKeys: true },
'$options':
{ isNewRecord: false,
'$schema': null,
'$schemaDelimiter': '',
raw: true,
attributes:
[ 'tx_index',
'username',
'password',
'generation',
'reserved1',
'modified',
'created',
'next' ] },
hasPrimaryKeys: true,
__eagerlyLoadedAssociations: [],
isNewRecord: false }
Попробуйте распечатать весь объект 'user' один раз. Фактический пользовательский объект может быть вложен внутри некоторого объекта результата. –
Я вижу, что кажется экземпляром модели User, но не уверен, что это такое ... Похоже, что я неправильно понял что-то в использовании пользователя Promise ... – Julien