2017-10-10 61 views
0

目前,我正在运行一个带有express的节点js后端以从客户端访问mysql数据库。现在我正在重构我的代码,以将来自客户端的“胖”事物也放到nodejs后端。 我最初的想法是让喜欢快速通道:通过nodejs访问mysql数据库的最佳实践

ModuleA:

router.get('/getitem/:code',(req, res) => { 
let sql = `SELECT * FROM xyz WHERE CODE = ${req.params.code}`; 
let query = db.query(sql, (err, result) =>{ 
    if(err == null){ 
    console.log(result); 
    res.send(result); 
    }else{ 
    console.log("Error by getting item from db: " + err); 
    throw err; 
    } 
}); 
}); 

而由其他模块通过HTTP请求访问它,如果需要的话:

function geodataByLocationcode(locationcode){ 
request({ 
    method: 'GET', 
    url: "http://" + server_connection.host + ":" + server_connection.port + '/getitem/' + locationcode, 
    headers: { 
    "Content-Type": "application/json" 
    } 
},function(error, response, body){ 
.... 
} 

但是,这是最好的方法来做到这一点? 或者更好地以更直接的方式访问数据库 ,因为请求现在也来自后端?

+0

那么在我诚实的意见在我们的控制器的数据库访问是不是一个好方法...为什么没有一个服务模块处理数据库查询?因为在你的控制器有数据库的依赖关系,这将使单元测试很难... –

+0

你有任何这样的例子/教程? – WeSt

回答

1

您可以找到一个很好的示例,说明如何使用本机驱动程序使用MySql和Node.js(没有像knex或ORM之类的任何查询生成器,如书架)。

依赖关系:

  • expressjs 4.x的
  • mysql2

expressjs 4.x的

的核心概念是:

例子:https://github.com/Talento90/organization-api/tree/master/organizations-api/src