快速将值插入 MySQL 数据库
Express insert values into MySQL database
问题已解决。请往下看
我是 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;
routes/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'
});
如果我对你项目的目录结构理解正确的话,你的 routes 目录紧挨着 models 目录,对吧?
如果是这种情况,您需要将 routes/index.js 中的 require 更改为使用 ../,这样它就会到达正确的位置:
var User = require('../models/User');
当我更改 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;
问题已解决。请往下看
我是 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;
routes/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'
});
如果我对你项目的目录结构理解正确的话,你的 routes 目录紧挨着 models 目录,对吧? 如果是这种情况,您需要将 routes/index.js 中的 require 更改为使用 ../,这样它就会到达正确的位置:
var User = require('../models/User');
当我更改 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;