技術記事: Egg.js を使用してバックエンド サービス API を構築する (コレクション シリーズ)

php是最好的语言
リリース: 2018-07-27 17:05:44
オリジナル
4388 人が閲覧しました

私はjsを勉強していたときにEgg.jsに出会い、詳しく勉強しました。Alibabaが立ち上げたKoaをベースにしたノード開発フレームワークです。エンタープライズレベルのフレームワークとアプリケーションのために生まれました。バックエンド サービス API を構築する方法については、さらに検討する必要があります。この記事ではバックエンドサービスAPIを構築するためのEgg.jsを中心に紹介しますので、必要に応じて参照してください。

前にも書きましたが

通常の開発はフロントエンドとバックエンドの分離に基づいているため、Eggを使用してバックエンドサービスを作成し、他のプロジェクトと連携するためのAPIインターフェースのセットを書くことを考えました。このプロジェクトの技術スタックは、Egg.js、MongoDB、および mongoose を使用します。この記事では、登録およびログイン モジュールとユーザー センター モジュールを作成するプロセスを記録します。その目的は、学習プロセスをタイムリーに要約し、文書化のスキルを発揮し、全員と共有してコミュニケーションを図り、一緒に進歩することです。

プロジェクトアドレス: Egg-API

プロジェクトは継続的に更新されます。気に入っていただけましたら、いいね、フォロー、スター、フォークをお願いします。 _

以下本文です

要件分析

登録およびログインモジュールの場合、要件分析は次のとおりです:

  • 新しいユーザーとして登録し、入力されたデータを確認します

  • にログインするにはシステムでは、入力されたデータはトークン認証に基づいて検証される必要があります

  • ログアウト機能

  • ユーザーセンターモジュールで個人情報を表示するにはログインしてください

  • ユーザーセンターモジュールで個人情報を変更します

データ分析と設計

明示的なデータ:

  • userName: String ユーザー名

  • userPass: String アカウントパスワード

  • userEmail: String ユーザーのメールアドレス

  • telphone: String 携帯電話番号

  • avatar: 文字列アバター

  • age: 数値年齢

  • 性別: 文字列性別

  • City: 文字列都市

暗黙的データ:

  • userRole: 数値ユーザー役割(1.一般利用者、2.管理者、3.スーパー管理者、デフォルトのユーザーは一般ユーザーです、スーパー管理者はデータベース作成時に作成されます)

  • userCreate: Date ユーザー作成時刻

  • lastLoginTime: Date 最終ログイン時刻

  • laseLoginPlace: String 最終ログインアドレス

API 分析設計

以下のインターフェイスの説明の API はインターフェイス名を指し、params は受信データを指し、code は応答結果識別コードを指し、msg は応答結果を指します情報の説明、データは応答で正常に返されたデータを指します

登録インターフェース
api: /api/v1/signup  (post)

params: {
    userName: String,  // 用户名,具有唯一性
    userPass: String,  // 用户密码
    userEmail: String,  // 用户邮箱
}

code: 1、注册成功 0:输入信息不完善或有误 -1:注册失败,该用户名已存在

msg: 响应返回的信息说明

data: {
    _id: _id,
    userName: 用户名,
    token: 生成的token,
}
ログイン後にコピー
ログインインターフェース
api: /api/v1/signin  (post,请求头带token)

params: {
    userName: String,  // 用户名
    userPass: String,  // 用户密码
}

code: 1、登录成功 0:输入信息不完善或有误  -1:用户不存在

msg: 响应返回的信息说明

data: {
    _id: _id,
    userName: 用户名,
    lastLoginTime: 上次登录时间,
    lastLoginPlace: 上次登录地点,
}
ログイン後にコピー
ログアウトインターフェース
api: /api/v1/signout  (get)

code: 1、登出成功,前端退出系统并清空token

msg: 登出响应返回信息说明

data: {}
ログイン後にコピー
個人情報の表示インターフェース
api: /api/v1/user/userName  (post,请求头带token)

params: {
    userName: String,
}

code: 1、查询成功  0、输入信息不完善  -1、查询失败

msg: 查找个人信息返回信息说明

data: {
    userName: 用户名,
    userEmail: 用户邮箱,
    age: 年龄,
    city: 城市,
    ......
}
ログイン後にコピー
個人情報の変更インターフェース
api: /api/v1/user/userName (put,token)

params: {
    ......  // 更改的信息
}

code: 1、更新成功 0、输入信息不完善或有误 -1、更新失败

msg: 更新个人信息返回信息说明

data: {
    userName: 用户名,
    ......
}
ログイン後にコピー
コーディングの実装

注: 部分的なコーディング実装手順のみが提供されています。完全な内容については、Egg-API にアクセスしてください

プロジェクトが完了した後、プロジェクトのディレクトリ構造の合意は公式のものと一致します。 MongoDB データベースを使用したいため、最初に Egg-mongoose をインストールし、設定ファイルに次のように記述する必要があります:

// config/plugin.js
exports.mongoose = {
    enable: true,
    package: 'egg-mongoose',
};
// config/config.default.js
config.mongoose = {
    url: 'mongodb://127.0.0.1/apiExample',
    options: {},
};
ログイン後にコピー

モデル フォルダーにスキーマ ファイルを定義します:

const UserSchema = new Schema({
    userName: { type: String, unique: true, required: true, },
});
ログイン後にコピー

ルート定義:

router.post('/api/v1/signup', controller.user.signup);
ログイン後にコピー

コントローラーの書き込み: Parse ユーザー用入力し、処理後に対応する結果を返します。取得したデータを render に入れてレンダリングし、レンダリング結果をブラウザに送信することも、データを ctx.body に直接割り当てて、json モードで返すこともできます。

class UserController extends Controller {
    // 登录
    async signin() {
        const { ctx } = this;
        const rule = {
            userName: { type: 'string', required: true, message: '必填项' },
            userPass: { type: 'string', required: true, message: '必填项' },
        };
        const signinMsg = ctx.request.body;
        await ctx.validate(rule, signinMsg);
        signinMsg.userPass = ctx.helper.encrypt(signinMsg.userPass);
        const result = await ctx.service.user.signin(signinMsg);
        ctx.body = result;
    }
}
ログイン後にコピー

サービスの作成: ビジネス ロジック層の作成に使用され、再利用できます。複雑なデータの処理。たとえば、表示する情報をデータベースから取得するか、サードパーティのサービスを呼び出す必要があります。

class UserService extends Service {
    // 更新用户信息
    async updateUser(userMsg) {
        const { ctx } = this;
        const res = {};
        const result = await ctx.model.User.findByIdAndUpdate(userMsg._id, userMsg);
        res.code = 1;
        res.msg = '用户信息已更改';
        res.data = result;
        return res;
    }
}
ログイン後にコピー
単純なノードアプリケーションの構造は次のようになり、Egg.js がインターフェースサービスを担当します。 apache php mysql

関連記事:

Nodejs を使用して Web サーバーを構築する方法

サーバーエンタープライズ Web サイトのバックエンド構築の問題

関連ビデオ:

高性能 Linux サーバー構築ビデオ チュートリアル

以上が技術記事: Egg.js を使用してバックエンド サービス API を構築する (コレクション シリーズ)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート