2013-04-21 101 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(); 
     }); 

    }) 
    }) 
}) 

添加回調(完成)有幫助!