2017-01-26 4 views
0

私はnode.jsが新しく、(ユーザー名、パスワード)カップルを含むデータベースのユーザーからパスワードを取得しようとしています。 findOne関数は1つの結果を返すようですが、パスワードにアクセスしようとすると、結果として常に「未定義」になります。誰かが私を助けてくれますか?Node.js/sequelize:findOne()関数の結果へのアクセス?

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) { 

を私は出力に持っている。ここ

は本当に簡単server.jsです。

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 

クエリはOKのようですが、パスワードにアクセスできない(定義されていません)。

最後に、データベースの内容:私は私が間違ってやっていること見つけることに怒っつもり

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 ::

私はwoleユーザーオブジェクトの印刷 "はconsole.log(ユーザ);" は、ここで出力されます。それは何ですか ? 'User'モデルのインスタンスですが、それは空ですか?

+0

'user'オブジェクト全体を一度印刷してみてください。実際のユーザオブジェクトは、いくつかの結果オブジェクトの中にネストすることができます。 –

+0

モデルユーザーのインスタンスであると思われるものを見ることができますが、それが何であるかはわかりません...プロミスの「ユーザー」を使用して何かを誤解したようです... – Julien

答えて

0

私は最終的に問題を発見しました。私のデータベーステーブルには列のIDがありませんでした。これは後継のために重要です。だから私はそれを使っていなくても、上のソースコードを変更することなくそれを追加します。

関連する問題