开发Express应用

MVC 是很多应用开发时都会采用的一种「架构模式」,会把一个应用分成 Model-View-Controller,每一部分各自负责:

  • Model - 应用的功能实现、数据库相关操作等
  • Controller - 负责转发请求,对请求进行处理等
  • View - 应用的界面部分,与用户的交互等

同样的,我们在开发Express应用的时候也可以采取这样的清晰明了的开发模式,所以我们可以先构建好应用的文件目录,大致如下:

  1. - models/
  2. - controllers/
  3. - views/
  4. - app.js
  5. - package.json

这次我也是用的 MVC 的结构,同时稍微扩充了一个 Service 层把数据定义和操作分割:Model 只定义数据,Service 定义操作数据的方法。

定义路由

在项目中,我们可以在 Controller 中定义路由的规则,但是我觉得将项目中路由的部分从中拆出来单独的作为一个文件,即将所有的路由都定义在一起会比较清晰。

一般而言,项目的路由的代码相对于其他的代码实际上并不多,一般一个页面的操作的路由代码仅仅只有1~3行,对于小型的项目而言,一个路由文件就已足矣。

而且如果将路由放在不同的目录中会需要同时在这些文件中require('express'),增加了不必要的重复代码。

  1. app.get('/', site.index);
  2. app.post('/register', user.register);

其中 siteuser 分别为两个 Controller 的名称,分别定义不同的 GET 或者 POST 路由规则。

MongoDB

MongoDB 对于 Node 而言确实很方便,由于 MongoDB 使用的是 JSON 风格的文档存储结构,所以特别是处理数据的时候就像是在处理 JavaScript 的对象一样。

有不知道 MongoDB 为何物的同学可以先点击本节末尾的链接了解一番。

在 Express 中使用 Mongoose 来操作 MongoDB 也特别的方便,例如以下是使用 Mongoose 连接数据库的一个操作:

Mongoose 是一个用于操作 MongoDB 的 ORM 模块。

  1. var mongoose = require('mongoose');
  2. mongoose.connect('mongodb://127.0.0.1/test', function (err) {
  3. if (err) {
  4. console.log('connect to %s error: ', err.message);
  5. process.exit(1);
  6. }
  7. });

再比如定义 Schema,以简单的 User 为例:

  1. var mongoose = require('mongoose');
  2. var Schema = mongoose.Schema;
  3. var UserSchema = new Schema({
  4. name: { type: String },
  5. password: { type: String }
  6. });
  7. mongoose.model('User', UserSchema);

参考