使用Node.js + Express + Sequelize的最基本的web服务器配置
為了處理大量的任務,我們選擇了採用非阻塞I/O模型的編程語言。我們希望構建「Node.js」的最小系統。
Node.js是什么?
服务器端的JavaScript。是在由Google开发的V8引擎上运行的一种语言。
“Express” 是什么意思?
一个专为 Node.js 打造的高效且轻量级的Web框架。
sequelize是什么
为Node.js设计的ORM,支持PostgreSQL、MySQL、SQLite和MSSQL等数据库。
环境和集成开发环境
mac osx 10.9.5:苹果操作系统OSX 10.9.5
mysql 5.6.31:MySQL 5.6.31
eclipse neon + nodeclipse:Eclipse Neon + Nodeclipse
安装Node.js
使用Homebrew安装Node.js。
同时也会安装Node.js的软件包管理工具npm。
$ brew install node
安装express-generator
express-generator是一个用于创建express框架模板(骨架)的模块。
$ npm install express-generator -g
制作Express骨架
$ express node_base
文件夹的结构如下所示。
node_base(workfolder)
├─app.js
├─package.json
├─public
│ ├─images
│ ├─javascripts
│ └─stylesheets
│ └─style.css
├─routes
│ ├─index.js
│ └─users.js
├─bin
│ └─www
└─views
├─error.jade
├─layout.jade
└─index.jade
安装 sequelize
首先,我们要修改node_base文件夹中的package.json。
package.json是一个用于整理npm依赖等信息的json文件。
要添加到依赖项的模块。
"mysql": "~2.11.1",
"sequelize": "~3.23.6",
{
"name": "node_base",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "~1.15.1",
"cookie-parser": "~1.4.3",
"debug": "~2.2.0",
"express": "~4.13.4",
"jade": "~1.11.0",
"morgan": "~1.7.0",
"serve-favicon": "~2.3.0",
"mysql": "~2.11.1",
"sequelize": "~3.23.6"
}
}
使用npm进行安装
安装新增的模块。
$ pwd
path/to/workspace/node_base
$ npm install
安装sequelize-cli
sequelize-cli是Sequelize的命令行界面工具,非常方便实用。建议安装它。
$ npm install -g sequelize-cli
创建DB并执行数据库迁移
首先,我们需要初始化 Sequelize 环境。
$ sequelize init
在node_base文件夹中将创建以下文件夹。
node_base(workfolder)
├─config
│ └─config.json # DB周りの設定情報が記載
├─migrations # sequelize-cliでmigrationファイルを作成した際に格納されるフォルダ
├─seeders
└─models # sequelize-cliでmodelを作成した際に格納されるフォルダ
为了对应已创建的模型,需要在MySQL中创建数据库以进行迁移。
要导入的数据库信息在config/config.json中记录。
{
"development": {
"username": "root",
"password": null,
"database": "node_base",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "node_base_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "node_base",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
在config.json中,记录了每个环境的数据库设置信息。
创建SQL文件并导入
创建 SQL 文件。
CREATE DATABASE node_base;
我会将其输入到数据库中。
$ mysql -u root < config/db.sql
创建模型和迁移
我们将使用Sequelize-cli来创建模型和数据库。
建立模型
执行以下命令将创建用户模型。执行此命令后,将在models文件夹中创建user.js文件,并在migrations文件夹中创建用于创建模型的迁移文件。
$ sequelize model:create --name User --attributes name:string
移民的产生
虽然已经在上述中创建了用户模型的迁移文件,但在此处我们将创建新的迁移文件。由于必须使用以下命令创建迁移才能运行db:migrate,我认为这可能是必要的。
$ sequelize migration:create
执行数据库迁移
$ sequelize db:migrate
当上述指令完成后,先前创建的用户表将在数据库内被创建。
创建用户API
使用express-generator创建的骨架已经包含了用户API,只需要在那里传递用户的ID和姓名,就可以创建或搜索用户数据表的API。
var express = require('express');
var models = require("../models");
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
var user_id = req.query.user_id;
var name = req.query.name;
models.User.findOrCreate(
{"where": {"id": user_id},
"defaults": {"id": user_id, "name": name}}
).spread(function(user, created){
res.send({"user": user, "created": created});
});
});
module.exports = router;
服务器启动和API测试
我将启动服务器并尝试确认API。
$ npm start
访问此链接:http://127.0.0.1:3000/users/?user_id=1&name=test

GitHub (中文名:码云) 是一个面向开源及私有软件项目的托管平台,基于 Git 版本控制系统。
请对已在GitHub上上传的应对上述情况的源代码进行克隆,如有兴趣,请点击以下链接:
https://github.com/yu-sa/node_base
結論
-
- defacto standardなモジュール等が充実しており、簡単なwebサーバはすぐ作れるようです。
- ノンブロッキングI/Oモデルを採用している事により、処理を非同期で実行しレスポンスを速やかに返す頃が出来るため、設計等をしっかりと行えば高速なwebサーバを作成する事が出来そうで、作っていて面白そうな言語であると感じました。