Экспресс-вставка значений в базу данных MySQL

ЗАДАЧА РЕШЕНА. Пожалуйста, смотрите ниже.

Я новичок в Express и NodeJS, отказался от Laravel и PHP.

Что я хочу сделать, так это добавить запись в базу данных MySQL, но я не могу соединить точки. Я следую этой серии руководств:

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

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

Есть две переменные db, я не мог понять, как их использовать.

Вот ошибка.

Невозможно прочитать свойство «расширить» неопределенного

TypeError: Не удается прочитать свойство «расширить» неопределенного в объекте. (/Applications/MAMP/htdocs/myapp/myapp/models/User.js:5:20) в Module._compile (module.js:460:26) в Object.Module._extensions..js (module.js:478) :10) в Module.load (module.js:355:32) в Function.Module._load (module.js:310:12) в Module.require (module.js:365:17) в 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'
});

person salep    schedule 04.10.2015    source источник


Ответы (2)


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

var User = require('../models/User');
person Nir Levy    schedule 04.10.2015
comment
Спасибо, я пропустил это. Теперь я получаю новую ошибку. Невозможно прочитать свойство «расширить» неопределенного типа. Ошибка типа: невозможно прочитать свойство «расширить» неопределенного в Object.‹anonymous› (/Applications/MAMP/htdocs/myapp/myapp/models/User.js:5:20) в Module._compile (модуль.js:460:26) - person salep; 04.10.2015

Проблема решена, когда я меняю 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;
person salep    schedule 04.10.2015
comment
Правильно, если вы ничего не экспортируете, спасибо, что включение модуля ничего не присвоит переменной. Стоит отметить, что если вы хотите экспортировать несколько вещей, вместо использования module.exports используйте вместо этого exports.someThing, таким образом, someThing будет свойством объекта, которому вы назначаете модуль. Кроме того, если модуль находится в том же каталоге, нет необходимости в ./ в требуемом пути вашего модуля. - person OriginalEXE; 04.10.2015