使用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

スクリーンショット 2016-07-24 11.43.01.png

GitHub (中文名:码云) 是一个面向开源及私有软件项目的托管平台,基于 Git 版本控制系统。

请对已在GitHub上上传的应对上述情况的源代码进行克隆,如有兴趣,请点击以下链接:
https://github.com/yu-sa/node_base

結論

    • defacto standardなモジュール等が充実しており、簡単なwebサーバはすぐ作れるようです。

 

    ノンブロッキングI/Oモデルを採用している事により、処理を非同期で実行しレスポンスを速やかに返す頃が出来るため、設計等をしっかりと行えば高速なwebサーバを作成する事が出来そうで、作っていて面白そうな言語であると感じました。
bannerAds