首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在nodejs中组织与DB的交互?

如何在nodejs中组织与DB的交互?
EN

Stack Overflow用户
提问于 2013-12-10 07:36:52
回答 1查看 739关注 0票数 2

我的特快应用程序中有这样一个结构:

  • db助手,用于与maria db交互。

代码:

代码语言:javascript
复制
var MariaSQL = require('mariasql');
var db = new MariaSQL();
var queries = {
    getUserByID : 'SELECT * FROM user WHERE id=:id',
    getUserByUsername : 'SELECT * FROM user WHERE username=:username'
};

module.exports = {
    connect : function(config){
        db.connect({
            host : config.maria.host,
            user : config.maria.user,
            password : config.maria.password,
            db : config.maria.db
        });
        db.on('connect', function() {
            console.log('Successfully connected to DB');
        })
        .on('error', function(err) {
            console.log('Connection error: ' + err);
        })
        .on('close', function(hadError) {
            console.log('Client closed');
        });
    },
    executeQuery : function(queryName, queryData, callback){
        var data = queryData || {};
        var result = [];
        var error;
        if(queryName in queries){
            var pq = db.prepare(queries[queryName]);
            db.query(pq(data))
            .on('result', function(res) {
                res.on('row', function(row) {
                    result.push(row);
                })
                .on('error', function(err){
                    error = err;
                })
                .on('end', function(info) {
                    //console.log('Result finished successfully, numRows = ' + info.numRows + ', insertid=' + info.insertId);
                });
            })
            .on('end', function() {
                if(error)
                    callback(error);
                else
                    callback(null, result);
            });
        } else {
            callback(new Error('Wrong query with name = ' + queryName));
        }
    }
};
  • 在我的app.js中,我调用db_helper.connect(config);来初始化连接
  • 然后我只需调用db_helper的db_helper方法来执行查询并获得结果,f.e.: db_helper.executeQuery('getUserByUsername',{username : username},function(err,user){ . });

所以,我有一些非常重要的问题要问我:

  • 组织与DB的交互是正常的吗?
  • 为什么我有多条消息Successfully connected to DB?毕竟,我只调用了一次这个方法,当我初始化连接时,不是吗?
  • 据我所知,作者每次使用c.end()方法接收所有日期时都会关闭连接。但是我可以不关闭连接并使用打开的一个吗?

附注:抱歉我的英语..。谢谢帮助,这是我的第一个问题:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-10 08:00:17

我想没有普通的方法来组织一个项目或对一个项目的数据访问。我建议拆分连接和查询逻辑,我不会尝试创建一个大的散列queries来将所有使用的查询存储在一个中心位置。

您的类/模块/函数应该只负责一件事(参见单一责任原则)。这使更改(例如添加查询)本地,并且不强制代码只想查询用户、人员、.若要查看存储在单个对象中的所有查询,请参见界面偏析原理。遵循这两个原则可以使您的代码更易于维护(更改、扩展),并遵循node.js模块原则创建只做一件事而只做一件事的模块。

这个答案只讨论你问题的组织部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20488640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档