3

問題が解決しました。以下をご覧ください。

私は Express と NodeJS に不慣れで、Laravel と PHP を捨てました。

私がやりたいことは、MySQL データベースにレコードを追加できるようにすることですが、点をつなぐことができません。私はこのチュートリアルシリーズに従っています:

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

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

db 変数が 2 つあるのですが、使い方がわかりませんでした。

これがエラーです。

未定義のプロパティ 'extend' を読み取れません

TypeError: オブジェクトで未定義のプロパティ 'extend' を読み取れません。(/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"
  }

モデルをモデルフォルダーに保持します。

ユーザー.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'
});
4

2 に答える 2

1

あなたのプロジェクトのディレクトリ構造を正しく理解していれば、モデル ディレクトリの隣にルート ディレクトリがありますよね? この場合、routes/index.js の require を ../ を使用するように変更して、正しい場所に到達するようにする必要があります。

var User = require('../models/User');
于 2015-10-04T12:19:07.713 に答える
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;
于 2015-10-04T12:41:59.353 に答える