0

我即将开始为我正在开发的系统编写一个新模块。node-mysql我们使用包含一个customers表的 MySQL 数据库(所以我正在使用)。

我想要实现的是:

  • 在模块之外,我正在寻找客户 IDvar C = new Customer(1)在哪里。1
  • 现在,当我想从这个客户那里得到一些东西时,我可以做C.email或者C.first_name简单地返回一个值。
  • 我还需要能够重新设置该客户的值,C.email = 'example@example.com'或者可能:

    C.set('email', 'example@example.com')

创建这样一个模型的最佳模式是什么?

4

2 回答 2

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 的值括起来。

如果这不是您要求的,请忽略它....

于 2013-06-17T11:34:16.587 回答
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')
});
于 2013-06-26T19:52:34.193 回答