【问题标题】:Express insert values into MySQL database将值快速插入 MySQL 数据库
【发布时间】:2015-10-04 11:46:19
【问题描述】:

问题已解决。请往下看。

我是 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) 在需要(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'
});

【问题讨论】:

    标签: mysql node.js express-4


    【解决方案1】:

    如果我正确理解了您项目的目录结构,那么您在模型目录旁边有 routes 目录,对吗? 如果是这种情况,您需要将 routes/index.js 中的 require 更改为使用 ../,这样它就会到达正确的位置:

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

    【讨论】:

    • 谢谢,我错过了。现在我遇到了一个新错误。无法读取未定义类型错误的属性“扩展”:无法读取 Object.(/Applications/MAMP/htdocs/myapp/myapp/models/User.js:5:20)处未定义的属性“扩展”Module._compile (module.js:460:26)
    【解决方案2】:

    当我更改 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;
    

    【讨论】:

    • 正确,如果你不导出任何东西,感谢包含模块不会为变量分配任何东西。值得注意的是,如果您想导出多个内容,而不是使用module.exports,而是使用exports.someThing,这样someThing 将成为您分配模块的对象的属性。此外,如果模块在同一目录中,则不需要 ./ 在您的模块所需路径中。
    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2016-05-26
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多