2017-01-26 3 views
0

Я новичок в 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 } 
+0

Попробуйте распечатать весь объект 'user' один раз. Фактический пользовательский объект может быть вложен внутри некоторого объекта результата. –

+0

Я вижу, что кажется экземпляром модели User, но не уверен, что это такое ... Похоже, что я неправильно понял что-то в использовании пользователя Promise ... – Julien

ответ

0

Итак, я, наконец, нашел проблему: в моей таблице базы данных не было идентификатора столбца, что, по-видимому, важно для продолжения. Поэтому я добавляю его, даже если я его не использую, и он работает, не изменяя исходный код выше.

Смежные вопросы