向 node/express 中的 knex/bookshelf 模型添加函数
adding functions to a knex/bookshelf model in node/express
我有这样一个模型:
const User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true
});
module.exports = User;
有了这个我可以做一些事情
const User = require("../models/user");
User.fetchAll({columns:['id','email']}).then((data) => {
res.json(data);
}).catch(err => {
res.json(err);
});
如果我想为我的模型添加服装功能怎么办,例如:
var connection = require('./dbconnection.js');
var User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true
});
User.getUsers = (callback) => {
if (connection) {
const newLocal = "select * FROM users";
connection.query(newLocal, (err,rows,fields) => {
if (err) {
return res.sendStatus(500);
} else {
callback(null,rows);
}
});
}
};
module.exports = User;
然后做类似的事情:
const User = require("../models/user");
User.getUsers((err,data) => {
res.status(200).json(data);
});
这可能吗?还是只符合书架功能?
现在我得到的错误是 connection.query is not a function
而models/dbconnection.js是:
const mysql = require('mysql');
port = process.env.PORT || 3333;
if (port == 3333) {
var connection = mysql.createConnection({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
insecureAuth: true
});
} else {
console.log("Error");
}
connection.connect();
module.exports.connection = connection;
是的,您可以通过两种不同的方式将自定义功能添加到书架模型中。
- 实例方法
例如,你想return用户的全名,你的用户模型看起来像这样
const User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true,
//be careful here, if you use arrow function `this` context will change
//and your function won't work as expected
returnFullName: function() {
return this.get('firstname') + this.get('lastname');
}
});
module.exports = User;
那么你会像这样调用这个函数
User.forge().where({id: SOME_ID}).fetch()
.then(function(user) {
var fullName = user.returnFullName();
});
- Class 方法
例如,你想return基于用户名的用户电子邮件,你的用户模型看起来像这样
const User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true
}, {
getUserEmail: function(SOME_USERNAME) {
return User.forge().where({username: SOME_USERNAME}).fetch()
.then(function (user) {
if(user) {
return Promise.resolve(user.get('email'));
} else {
return Promise.resolve(null);
}
});
}
});
module.exports = User;
然后你可以像
一样调用这个函数
User.getUserEmail(SOME_USERNAME)
.then(function(email) {
console.log(email);
});
我有这样一个模型:
const User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true
});
module.exports = User;
有了这个我可以做一些事情
const User = require("../models/user");
User.fetchAll({columns:['id','email']}).then((data) => {
res.json(data);
}).catch(err => {
res.json(err);
});
如果我想为我的模型添加服装功能怎么办,例如:
var connection = require('./dbconnection.js');
var User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true
});
User.getUsers = (callback) => {
if (connection) {
const newLocal = "select * FROM users";
connection.query(newLocal, (err,rows,fields) => {
if (err) {
return res.sendStatus(500);
} else {
callback(null,rows);
}
});
}
};
module.exports = User;
然后做类似的事情:
const User = require("../models/user");
User.getUsers((err,data) => {
res.status(200).json(data);
});
这可能吗?还是只符合书架功能?
现在我得到的错误是 connection.query is not a function
而models/dbconnection.js是:
const mysql = require('mysql');
port = process.env.PORT || 3333;
if (port == 3333) {
var connection = mysql.createConnection({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
insecureAuth: true
});
} else {
console.log("Error");
}
connection.connect();
module.exports.connection = connection;
是的,您可以通过两种不同的方式将自定义功能添加到书架模型中。
- 实例方法
例如,你想return用户的全名,你的用户模型看起来像这样
const User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true,
//be careful here, if you use arrow function `this` context will change
//and your function won't work as expected
returnFullName: function() {
return this.get('firstname') + this.get('lastname');
}
});
module.exports = User;
那么你会像这样调用这个函数
User.forge().where({id: SOME_ID}).fetch()
.then(function(user) {
var fullName = user.returnFullName();
});
- Class 方法
例如,你想return基于用户名的用户电子邮件,你的用户模型看起来像这样
const User = db.Model.extend({
tableName: 'users',
hasSecurePassword: true
}, {
getUserEmail: function(SOME_USERNAME) {
return User.forge().where({username: SOME_USERNAME}).fetch()
.then(function (user) {
if(user) {
return Promise.resolve(user.get('email'));
} else {
return Promise.resolve(null);
}
});
}
});
module.exports = User;
然后你可以像
一样调用这个函数User.getUserEmail(SOME_USERNAME)
.then(function(email) {
console.log(email);
});