Mysql 有没有办法不在我的express应用程序中硬编码sql查询?

Mysql 有没有办法不在我的express应用程序中硬编码sql查询?,mysql,node.js,express,Mysql,Node.js,Express,因此,我正在为一个项目制作一个express应用程序,我使用mysql作为数据库,我以前在代码中硬编码了我的sql查询,但根据我的老师的说法,这样做是不好的做法,所以我正在寻找一种不必硬编码的方法 我尝试过使用mongoose查询find和findAll,我正在寻找类似的东西 app.get("/shops/:id",function(req,res){ var id = req.params.id; connection.query('SELECT * FROM `menuI

因此,我正在为一个项目制作一个express应用程序,我使用mysql作为数据库,我以前在代码中硬编码了我的sql查询,但根据我的老师的说法,这样做是不好的做法,所以我正在寻找一种不必硬编码的方法

我尝试过使用mongoose查询find和findAll,我正在寻找类似的东西

app.get("/shops/:id",function(req,res){
    var id = req.params.id;

    connection.query('SELECT * FROM `menuItems` WHERE shop_id =?',[id],function(error,results,fields) {
        console.log(results);
        res.json(JSON.stringify(results));
    })
});
我不想像上面的代码片段那样硬编码我的查询

请帮助我找到一种不在我的应用程序中硬编码sql查询的方法。提前谢谢

存储过程。防止各种可能出现的问题 注射,保养。将数据库代码放在数据库代码所属的位置

ORM工具(如Hibernate、Subsonic等)意味着您永远看不到线 首先是(*)SQL。更陡峭的学习曲线,但一个伟大的 练习早一点开始,而不是晚一点

请看答案


(*)摘录修改为与OPs场景相匹配

存储过程解决了某些形式的注入,可以隐藏其他形式,并且通常会增加维护,因为它们很难调试。没有理由认为它应该存在于数据库中,只是一个宗教性的声明。问题是关于MySQL,而不是T-SQL,所以复制答案不是一个好主意。问题是关于SQL查询的一般硬编码。OP可以从摘录中得到想法,尽管答案中的“SQL”前面有一个“T-”。但是答案被编辑了。虽然存储过程和ORM是避免代码中SQL的机制,“教师”的“坏习惯”语句(和堆栈溢出答案)应该包括一些理由/折衷的讨论,因为堆栈溢出的人都在为这些替代方案苦苦挣扎,而像这个问题这样简单的无SQL注入代码是完全合适的。他说,如果我必须更改我的db,或者我是唯一知道SQL的人,而我不可用,该怎么办?很高兴你得到了解释。如果只有您知道存储过程/ORM,并且不可用,该怎么办?也许ORM知识更丰富,尽管ORM似乎和DBs一样多。如果代码库不觉得有必要使用数据库技术,那么更改数据库就是使用ORM的一些理由。存储过程-难以调试,并且将代码置于开发中版本控制/修订历史记录之外。