我即将开始为我正在开发的系统编写一个新模块。我们使用MySQL数据库(所以我使用的是node-mysql
),其中包含customers
表。
我想要实现的目标是:
var C = new Customer(1)
1
是客户ID。C.email
或C.first_name
只返回一个值。我还需要能够在此客户C.email = 'example@example.com'
上设置值,或者可能:
C.set('email', 'example@example.com')
创建这样一个模型的最佳模式是什么?
答案 0 :(得分:0)
我已经有类似的东西...不完全是你要求但非常接近的 我已经概括了核心部分,这里是代码。希望这会有所帮助......
var mysql = require('mysql');
var con = mysql.createConnection({
host:"yourHostName",
user:"yourUserName",
password:"yourPassword"
});
con.query("use databaseName");
function getCustomerDetails(custId){
con.query("select * from customer where custId = "+custId,function(err,result,fields){
if(!err)
return result;
else
console.log(err);
});
}
function updateCustomerDetails(custId,fieldName,fieldValue){
con.query("update customer set "+fieldName+" = "+fieldValue+" where custId = "+custId,function(err,result,fields){
if(!err)
return true;
else
console.log(err);
return false;
});
}
exports.getCustomerDetails = getCustomerDetails;
exports.updateCustomerDetails = updateCustomerDetails;
然后假设您将模块保存为dbAccessModule.js然后您可以使用这样的函数
var C = require('./dbAccessModule');
result = C.getCustomerDetails(1);
console.log(result.fieldName);
var success = C.updateCustomerDetails(1,'name','sumit');
if(success)
console.log('Table Updated successfully....');
else
// take necessary action according to your application
您需要注意的一件事是,如果您使用字符串值更新任何字段 那么请不要忘记用单引号括起fieldValue的值。
如果这不是您要求的,请忽略它....
答案 1 :(得分:0)
我最近创建了两个数据库模块,您可能有兴趣查看它们是否符合您的需求 - 一个ORM:http://bookshelfjs.org和查询构建器:http://knexjs.org
ORM基于Backbone.js的设计模式
所以,你可以做这样的事情:
// Create the base customer object
var Customer = Bookshelf.Model.extend({
tableName: 'customers'
});
// Create a new customer instance with an id of 1, fetch it, and then
// act on the result model 'customer'.
new Customer({id: 1}).fetch().then(function(customer) {
console.log(customer.get('name'))
customer.set('email', 'email@example.com')
return customer.save();
});
您还可以扩展基础Customer类以启用缩写语法,类似于您要查找的内容:
// Create the base customer object, with a static findOne method.
var Customer = Bookshelf.Model.extend({
tableName: 'customers'
}, {
find: function(id) {
return new this({id: id}).fetch();
}
});
Customer.find(1).then(function(C) {
console.log(C.get('name'))
C.set('email', 'email@example.com')
});