2015-10-04 2 views
3

ПРОБЛЕМА РЕШАЕТ. Посмотрите ниже.Экспресс значения вставки в базу данных MySQL

Я новичок в Экспрессе и 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', вместо этого используйте' export.someThing', таким образом 'someThing' будет свойством объекта, которому вы назначили модуль. Кроме того, если модуль находится в том же каталоге, нет необходимости в ./ в вашем модуле. – OriginalEXE

1

Если я правильно понимаю структуру каталогов вашего проекта, у вас есть каталог маршрутов рядом с каталогом моделей, ri GHT? , если это так, то вам нужно изменить потребуем маршрутов/index.js использовать ../, поэтому он будет добраться до нужного места:

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

Спасибо, я пропустил это. Теперь я получаю новую ошибку. Невозможно прочитать свойство 'extend' of undefined ТипError: Не удается прочитать свойство 'extend' из неопределенного в Object. (/Applications/MAMP/htdocs/myapp/myapp/models/User.js:5:20) на Module._compile (module.js: 460: 26) – salep

 Смежные вопросы

  • Нет связанных вопросов^_^