13.2 对话数据库
wiki的每一页都可能是用户创建和编辑的。这意味着你必须把用户贡献的内容保存起来,以备不时之需。最好的解决方案是建立一个简单的数据库,可以保存所有的数据。为了让JavaScript代码化的客户端能够与数据库对话,你需要开发一些代码位于代码服务器端,起连接客户端与wiki数据库的作用。每一次数据库的查询流程如图13-2所示。这个过程与各种形式的语句执行(如SELECT、INSERT等)是一致的。

图13-1 运行中的 wiki 截图
客户端与数据库需要进行两次通信。第一次是查询数据库,以获取某个具体页面的所有修订。第二次是把新的修订插入到数据库中。这两者的流程是一样的,这样就可以容易地构建一个通用的、简单的通信层,这个层可以用在这里或者其他地方的JavaScript应用程序中。拥有这个通用通信层的另一个有益之处,在于你可以容易地在整个通信流程(见图13-2)步步为营,并了解JavaScript是怎么与数据库通信的。
图13-2 应用程序执行客户端请求的流程
注意 重要的是,你不应该从客户端直接发送原始的SQL请求。因为这样做的话会让服务器端和数据库无法抵抗恶意的攻击。因此应用程序中的所有SQL请求都应映射为关键字,然后转换为服务器端的真实请求。这会在保持客户端灵活的同时,仍能保护数据库免遭攻击。
为了进一步理解这个流程是如何运行的,你将逐步理解从JavaScript客户端发送请求到服务器端和数据库的过程。