Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js/sequelize:访问findOne()函数的结果?_Javascript_Node.js_Authentication_Sequelize.js - Fatal编程技术网

Javascript Node.js/sequelize:访问findOne()函数的结果?

Javascript Node.js/sequelize:访问findOne()函数的结果?,javascript,node.js,authentication,sequelize.js,Javascript,Node.js,Authentication,Sequelize.js,我是node.js的新手,我尝试从包含(用户名、密码)对的数据库中的用户检索密码。findOne函数似乎返回一个结果,但当我尝试访问密码时,结果总是“未定义”。有人能帮我吗 下面是真正简单的server.js: var express = require('express'); var app = express(); var sqlite = require('sqlite3'); var port = process.env.PORT || 8000;

我是node.js的新手,我尝试从包含(用户名、密码)对的数据库中的用户检索密码。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
因此,查询似乎可以,但我无法访问密码(未定义)

最后,数据库的内容:

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
发现自己做错了什么,我快发疯了

::编辑::

当我打印wole用户对象“console.log(user);”时,这里是输出。它是什么?“用户”模型的实例,但它是空的

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 }

所以我最终发现了问题:我的数据库表没有任何列id,这对于sequelize来说似乎很重要。所以我添加了它,即使我不使用它,它也可以工作,不需要修改上面的源代码。

试着打印一次整个
user
对象。实际的用户对象可能嵌套在某个结果对象中。我可以看到似乎是模型用户的实例,但不确定它是什么…似乎我误解了Promise“user”的用法。。。