2013-04-21 102 views
2

我正在为Sequelize的第1步努力工作。我已经通读了这篇教程,并且我一定会错过一些基本的东西,因为我已经花了一天时间来试图弄清楚我做错了什么。使用Sequelize保存对象

以下是我用摩卡书写的单元测试。

var db = require("../../db.js").sequelize; 
var DataTypes = require("sequelize"); 

var _table = db.define('users', { 
     name: DataTypes.STRING, 
     email: DataTypes.STRING 
    }, { 
     timestamps: false 
    }); 

var assert = require("assert") 
describe('Users', function(){ 
    describe('#save()', function(){ 
    it('should save a user', function(){ 
     _table 
     .build({name: 'test', email: '[email protected]'}) 
     .save() 
     .success(function(o){ 
      console.log("saved"); 
      console.log(o.values); 
     }).error(function(error) { 
      console.log("++++++++++"); 
      console.log(error); 
     }); 

    }) 
    }) 
}) 

它运行良好,我现在已经删除了断言。问题是,我没有看到任何一个控制台日志,不成功不是错误。另外,数据库中没有行。

的db.js仅仅是一个实用程序文件,有助于创造Sequelize JS的实例与DB配置 - 我已经做了console.dir并通过实例看,它看起来如下:

{ options: 
    { dialect: 'mysql', 
    host: 'localhost', 
    port: 3306, 
    protocol: 'tcp', 
    define: {}, 
    query: {}, 
    sync: {}, 
    logging: [Function], 
    omitNull: false, 
    queue: true, 
    native: false, 
    replication: false, 
    pool: { maxConnections: 10, minConnections: 0, maxIdleTime: 1000 } }, 
    config: 
    { database: 'beacon', 
    username: 'beacon', 
    password: 'beacon', 
    host: 'localhost', 
    port: 3306, 
    pool: { maxConnections: 10, minConnections: 0, maxIdleTime: 1000 }, 
    protocol: 'tcp', 
    queue: true, 
    native: false, 
    replication: false, 
    maxConcurrentQueries: undefined }, 
    daoFactoryManager: { daos: [ [Object], [Object] ], sequelize: [Circular] }, 
    connectorManager: 
    { sequelize: [Circular], 
    client: null, 
    config: 
     { database: 'beacon', 
     username: 'beacon', 
     password: 'beacon', 
     host: 'localhost', 
     port: 3306, 
     pool: [Object], 
     protocol: 'tcp', 
     queue: true, 
     native: false, 
     replication: false, 
     maxConcurrentQueries: undefined }, 
    disconnectTimeoutId: null, 
    queue: [], 
    activeQueue: [ [Object] ], 
    maxConcurrentQueries: 50, 
    poolCfg: { maxConnections: 10, minConnections: 0, maxIdleTime: 1000 }, 
    pendingQueries: 0, 
    useReplicaton: false, 
    useQueue: true, 
    pool: 
     { destroy: [Function], 
     acquire: [Function], 
     borrow: [Function], 
     release: [Function], 
     returnToPool: [Function], 
     drain: [Function], 
     destroyAllNow: [Function], 
     getPoolSize: [Function], 
     getName: [Function], 
     availableObjectsCount: [Function], 
     waitingClientsCount: [Function] }, 
    isConnecting: false }, 
    importCache: {}, 
    queryInterface: 
    { sequelize: [Circular], 
    QueryGenerator: 
     { createTableQuery: [Function], 
     dropTableQuery: [Function], 
     renameTableQuery: [Function], 
     showTablesQuery: [Function], 
     addColumnQuery: [Function], 
     removeColumnQuery: [Function], 
     changeColumnQuery: [Function], 
     renameColumnQuery: [Function], 
     selectQuery: [Function], 
     insertQuery: [Function], 
     updateQuery: [Function], 
     deleteQuery: [Function], 
     incrementQuery: [Function], 
     addIndexQuery: [Function], 
     showIndexQuery: [Function], 
     removeIndexQuery: [Function], 
     getWhereConditions: [Function], 
     hashToWhereConditions: [Function], 
     attributesToSQL: [Function], 
     findAutoIncrementField: [Function], 
     addQuotes: [Function], 
     removeQuotes: [Function], 
     options: [Object] } } } 

现在我得到了屏幕上记录的INSERT语句,但实例从未将其写入数据库。我究竟做错了什么?

回答

5

该问题不是与续集有关,而是因为它是异步代码。要解决这个问题,只需修改测试:

var db = require("../../db.js").sequelize; 
var DataTypes = require("sequelize"); 

var _table = db.define('users', { 
     name: DataTypes.STRING, 
     email: DataTypes.STRING 
    }, { 
     timestamps: false 
    }); 

var assert = require("assert") 
describe('Users', function(){ 
    describe('#save()', function(){ 
    it('should save a user', function(done){ 
     _table 
     .build({name: 'test', email: '[email protected]'}) 
     .save() 
     .success(function(o){ 
      console.log("saved"); 
      console.log(o.values); 
      done(); 
     }).error(function(error) { 
      console.log("++++++++++"); 
      console.log(error); 
      done(); 
     }); 

    }) 
    }) 
}) 

添加回调(完成)有帮助!