2015-10-04 175 views
3

問題已解決。請看下面。將插入值傳入MySQL數據庫

我是Express和NodeJS的新手,拋棄了Laravel和PHP。

我想要做的是能夠將記錄添加到MySQL數據庫,但我無法連接點。我下面這個教程系列:

http://eddyjs.com/bookshelf-js/

http://eddyjs.com/using-mysql-with-bookshelf-js-part-2-using-the-database/

有兩個塊中的變量,我無法理解如何使用它們。

這是錯誤。

Cannot read property 'extend' of undefined

TypeError: Cannot read property 'extend' of undefined at Object. (/Applications/MAMP/htdocs/myapp/myapp/models/User.js:5:20) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Module.require (module.js:365:17) at require (module.js:384:17)

我通過npm安裝了所有依賴關係,一切正常。

"dependencies": { 
    "body-parser": "~1.13.2", 
    "bookshelf": "^0.8.2", 
    "cookie-parser": "~1.3.5", 
    "debug": "~2.2.0", 
    "express": "~4.13.1", 
    "jade": "~1.11.0", 
    "jquery": "^2.1.4", 
    "knex": "^0.8.6", 
    "morgan": "~1.6.1", 
    "mysql": "^2.9.0", 
    "serve-favicon": "~2.3.0" 
    } 

我在模型文件夾中放置我的模型。

user.js的

var db = require('./db'); 

var User = db.Model.extend({ 
    tableName: 'users' 
}); 

module.exports = User; 

路線/ index.js

router.get('/add', function(req,res,next) { 
    var User = require('../models/User'); 
    new User({ 
    'name': 'Edwin', 
    'pet': 'dog' 
    }) 
     .save() 
     .then(function (newUser) { 
     console.log('user created!', newUser); 
     }); 
}); 

db.js(數據庫連接應該打開一次,對嗎?所以,有住在這裏)

var knex = require('knex')({ 
    client: 'mysql', 
    connection: { 
     host  : 'localhost', 
     user  : 'root', 
     password : 'root', 
     port : 8889, 
     database : 'databasename', 
     charset : 'utf8' 
    } 
}); 

var bookshelf = require('bookshelf')(knex); 

var User = bookshelf.Model.extend({ 
    tableName: 'users' 
}); 

回答

0

問題,當我改變db.js.解決關鍵是module.exports = db;部分,我猜。

var knex = require('knex')({ 
    client: 'mysql', 
    connection: { 
     host  : 'localhost', 
     user  : 'root', 
     password : 'root', 
     port : 8889, 
     database : 'bosluk', 
     charset : 'utf8' 
    } 
}); 

var db = require('bookshelf')(knex); 

module.exports = db; 
+1

正確,如果你不導出任何東西,謝謝包括模塊不會爲變量分配任何內容。 值得注意的是,如果你想導出多個東西,而不是使用'module.exports',而是使用'exports.someThing',那麼'someThing'將是你分配模塊的對象的屬性。 另外,如果模塊位於同一個目錄中,則不需要模塊需要路徑中的./。 – OriginalEXE

1

如果我正確理解你的項目的目錄結構,你有models目錄旁邊的routes目錄,ri GHT? 如果是這種情況,您需要更改要求的路線/ index.js使用../,所以它會到達正確位置:

var User = require('../models/User'); 
+0

謝謝,我錯過了。現在我收到一個新的錯誤。 無法讀取未定義的屬性「擴展」 TypeError:無法讀取Object上未定義的 的屬性'extend'。 (/Applications/MAMP/htdocs/myapp/myapp/models/User.js:5:20) at Module._compile(module.js:460:26) – salep