国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Egg.js搭建后臺(tái)服務(wù)API

dailybird / 2764人閱讀

摘要:因?yàn)槠匠i_(kāi)發(fā)都是前后端分離的模式,就想著使用創(chuàng)建后臺(tái)服務(wù),寫(xiě)一套接口配合其他的項(xiàng)目。復(fù)雜數(shù)據(jù)的處理,比如要展現(xiàn)的信息需要從數(shù)據(jù)庫(kù)獲取或者是第三方服務(wù)的調(diào)用。更新用戶信息用戶信息已更改一個(gè)簡(jiǎn)單的應(yīng)用結(jié)構(gòu)就是這樣,如此便實(shí)現(xiàn)了用負(fù)責(zé)接口服務(wù)。

寫(xiě)在前面的話

最近在學(xué)習(xí)Egg.js,它是阿里推出的基于Koa的node開(kāi)發(fā)框架,為企業(yè)級(jí)框架和應(yīng)用而生。Egg.js 的官方文檔已經(jīng)很完善了,想學(xué)習(xí)Egg.js的可以直接查看官方文檔。

因?yàn)槠匠i_(kāi)發(fā)都是前后端分離的模式,就想著使用Egg創(chuàng)建后臺(tái)服務(wù),寫(xiě)一套API接口配合其他的項(xiàng)目。該項(xiàng)目的技術(shù)棧用到了Egg.js、MongoDB、mongoose。這篇文章記錄一下我寫(xiě)注冊(cè)登錄模塊和用戶中心模塊的過(guò)程,目的是及時(shí)歸納學(xué)習(xí)過(guò)程,鍛煉文檔能力,和大家進(jìn)行分享交流,共同進(jìn)步。

項(xiàng)目地址: Egg-API

項(xiàng)目持續(xù)更新中,喜歡的請(qǐng)點(diǎn)心,關(guān)注,star ,fork,這些是我長(zhǎng)期堅(jiān)持下去的動(dòng)力 (。_ 。) ?_

以下是正文 需求分析

對(duì)于注冊(cè)登陸模塊,需求分析如下:

注冊(cè)成為新用戶,對(duì)輸入的數(shù)據(jù)進(jìn)行校驗(yàn)

登陸進(jìn)入系統(tǒng),需要對(duì)輸入的數(shù)據(jù)進(jìn)行校驗(yàn),基于token鑒權(quán)認(rèn)證

登出功能

登陸進(jìn)去可以在用戶中心模塊查看個(gè)人信息

在用戶中心模塊修改個(gè)人信息

數(shù)據(jù)分析設(shè)計(jì)

顯式數(shù)據(jù):

userName: String 用戶名

userPass: String 賬號(hào)密碼

userEmail: String 用戶郵箱

telphone: String 手機(jī)號(hào)

avatar: String 頭像

age: Number 年齡

sex: String 性別

City: String 城市

隱式數(shù)據(jù):

userRole: Number 用戶角色(1.普通用戶、 2.管理員、 3.超級(jí)管理員,默認(rèn)用戶為普通用戶,超級(jí)管理員在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候創(chuàng)建)

userCreate: Date 用戶創(chuàng)建時(shí)間

lastLoginTime: Date 上次登錄時(shí)間

laseLoginPlace: String 上次登錄地址

API分析設(shè)計(jì)

下文接口說(shuō)明中的api指接口名,params指?jìng)魅氲臄?shù)據(jù),code指響應(yīng)結(jié)果標(biāo)識(shí)碼,msg指響應(yīng)結(jié)果信息說(shuō)明,data指響應(yīng)成功返回的數(shù)據(jù)

注冊(cè)接口
api: /api/v1/signup  (post)

params: {
    userName: String,  // 用戶名,具有唯一性
    userPass: String,  // 用戶密碼
    userEmail: String,  // 用戶郵箱
}

code: 1、注冊(cè)成功 0:輸入信息不完善或有誤 -1:注冊(cè)失敗,該用戶名已存在

msg: 響應(yīng)返回的信息說(shuō)明

data: {
    _id: _id,
    userName: 用戶名,
    token: 生成的token,
}
登錄接口
api: /api/v1/signin  (post,請(qǐng)求頭帶token)

params: {
    userName: String,  // 用戶名
    userPass: String,  // 用戶密碼
}

code: 1、登錄成功 0:輸入信息不完善或有誤  -1:用戶不存在

msg: 響應(yīng)返回的信息說(shuō)明

data: {
    _id: _id,
    userName: 用戶名,
    lastLoginTime: 上次登錄時(shí)間,
    lastLoginPlace: 上次登錄地點(diǎn),
}
登出接口
api: /api/v1/signout  (get)

code: 1、登出成功,前端退出系統(tǒng)并清空token

msg: 登出響應(yīng)返回信息說(shuō)明

data: {}
查看個(gè)人信息接口
api: /api/v1/user/userName  (post,請(qǐng)求頭帶token)

params: {
    userName: String,
}

code: 1、查詢成功  0、輸入信息不完善  -1、查詢失敗

msg: 查找個(gè)人信息返回信息說(shuō)明

data: {
    userName: 用戶名,
    userEmail: 用戶郵箱,
    age: 年齡,
    city: 城市,
    ......
}
更改個(gè)人信息接口
api: /api/v1/user/userName (put,token)

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

code: 1、更新成功 0、輸入信息不完善或有誤 -1、更新失敗

msg: 更新個(gè)人信息返回信息說(shuō)明

data: {
    userName: 用戶名,
    ......
}
編碼實(shí)現(xiàn)

注:編碼實(shí)現(xiàn)說(shuō)明只提供部分,完整內(nèi)容請(qǐng)移步Egg-API

假設(shè)你已經(jīng)初始化好了一個(gè)項(xiàng)目,項(xiàng)目的目錄結(jié)構(gòu)約定和官方的一致。因?yàn)槲覀円褂肕ongoDB數(shù)據(jù)庫(kù),所以要先安裝egg-mongoose,并在配置文件里寫(xiě)入:

// config/plugin.js
exports.mongoose = {
    enable: true,
    package: "egg-mongoose",
};
// config/config.default.js
config.mongoose = {
    url: "mongodb://127.0.0.1/apiExample",
    options: {},
};

在model文件夾定義我們的schema文件:

const UserSchema = new Schema({
    userName: { type: String, unique: true, required: true, },
});

路由定義:

router.post("/api/v1/signup", controller.user.signup);

controller編寫(xiě):用于解析用戶的輸入,處理后返回相應(yīng)的結(jié)果。我們可以把獲取到的數(shù)據(jù)放到render中進(jìn)行渲染,然后把渲染后的結(jié)果發(fā)給游覽器,或者,也可以把數(shù)據(jù)直接賦值給ctx.body,然后以json方式返回。

class UserController extends Controller {
    // 登錄
    async signin() {
        const { ctx } = this;
        const rule = {
            userName: { type: "string", required: true, message: "必填項(xiàng)" },
            userPass: { type: "string", required: true, message: "必填項(xiàng)" },
        };
        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;
    }
}

service編寫(xiě):用于編寫(xiě)業(yè)務(wù)邏輯層,可以復(fù)用。復(fù)雜數(shù)據(jù)的處理,比如要展現(xiàn)的信息需要從數(shù)據(jù)庫(kù)獲取,或者是第三方服務(wù)的調(diào)用。

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;
    }
}

一個(gè)簡(jiǎn)單的node應(yīng)用結(jié)構(gòu)就是這樣,如此便實(shí)現(xiàn)了用Egg.js負(fù)責(zé)接口服務(wù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/19305.html

相關(guān)文章

  • Egg.js搭建后臺(tái)服務(wù)API

    摘要:因?yàn)槠匠i_(kāi)發(fā)都是前后端分離的模式,就想著使用創(chuàng)建后臺(tái)服務(wù),寫(xiě)一套接口配合其他的項(xiàng)目。復(fù)雜數(shù)據(jù)的處理,比如要展現(xiàn)的信息需要從數(shù)據(jù)庫(kù)獲取或者是第三方服務(wù)的調(diào)用。更新用戶信息用戶信息已更改一個(gè)簡(jiǎn)單的應(yīng)用結(jié)構(gòu)就是這樣,如此便實(shí)現(xiàn)了用負(fù)責(zé)接口服務(wù)。 寫(xiě)在前面的話 最近在學(xué)習(xí)Egg.js,它是阿里推出的基于Koa的node開(kāi)發(fā)框架,為企業(yè)級(jí)框架和應(yīng)用而生。Egg.js 的官方文檔已經(jīng)很完善了,想學(xué)...

    idealcn 評(píng)論0 收藏0
  • 阿里egg.js初體驗(yàn)(二)

    摘要:接前一篇,阿里初體驗(yàn)一我們繼續(xù)我們的之旅。注意到,目錄里和兩個(gè)文件夾,這里也是我們編寫(xiě)業(yè)務(wù)邏輯的主要地方。用于解析用戶的輸入,處理后返回相應(yīng)的結(jié)果。在使用導(dǎo)出的模塊時(shí),需要把導(dǎo)出的模塊名改為駝峰標(biāo)準(zhǔn),且首字母變?yōu)樾?xiě)。 接前一篇,阿里egg.js初體驗(yàn)(一) 我們繼續(xù)我們的egg之旅。我們已經(jīng)完成了對(duì)于項(xiàng)目結(jié)構(gòu)的搭建,現(xiàn)在我們需要開(kāi)始業(yè)務(wù)的編寫(xiě)。注意到,目錄里controller和se...

    liaosilzu2007 評(píng)論0 收藏0
  • egg.js框架開(kāi)發(fā)環(huán)境搭建

    摘要:我為了方便直接就指定了淘寶倉(cāng)庫(kù)地址運(yùn)行服務(wù)運(yùn)行項(xiàng)目就比較簡(jiǎn)單了,運(yùn)行的命令在瀏覽器中打開(kāi)地址,就能看到服務(wù)已經(jīng)啟動(dòng)完成。 傳送門(mén):學(xué)習(xí)node.js服務(wù)開(kāi)發(fā)這一篇就夠了系列文章 1.創(chuàng)建工程目錄 1.1 創(chuàng)建一個(gè)文件夾叫 my-egg-application $ mkdir my-egg-application 不熟悉命令行的同學(xué)也可以手動(dòng)創(chuàng)建文件夾 2.初始化項(xiàng)目模板 2.1 進(jìn)...

    Steve_Wang_ 評(píng)論0 收藏0
  • Eggjs小試

    摘要:項(xiàng)目都很小,但為了進(jìn)一步了解,特意選擇了作為框架基礎(chǔ)開(kāi)發(fā)后端服務(wù)。能將請(qǐng)求限制在同源網(wǎng)站,即只有擁有專有令牌的網(wǎng)站發(fā)送請(qǐng)求才會(huì)正確響應(yīng)。項(xiàng)目生產(chǎn)靜默部署,啟動(dòng)使用,停止使用。不足工具函數(shù)的訪問(wèn)需要自己手動(dòng)添加擴(kuò)展另沒(méi)有寫(xiě)測(cè)試,希望下次補(bǔ)上。 前言 這段時(shí)間,用Eggjs作為后端服務(wù)框架開(kāi)發(fā)了幾個(gè)項(xiàng)目。項(xiàng)目都很小,但為了進(jìn)一步了解Eggjs,特意選擇了Eggjs作為框架基礎(chǔ)開(kāi)發(fā)后端服務(wù)。...

    waltr 評(píng)論0 收藏0
  • 一個(gè)vue加egg.js的博客

    摘要:之前自己的博客是用做的,后面想做一個(gè)有后臺(tái)的博客就打算用加來(lái)試試,于是就有了這個(gè)博客。 之前自己的博客是用hexo做的,后面想做一個(gè)有后臺(tái)的博客就打算用vue加node來(lái)試試,于是就有了這個(gè)博客。項(xiàng)目地址 W-Blog W-Blog是一個(gè)基于vue和node的小小小博客前端用vue,后端用egg.js 快速入門(mén) 技術(shù)棧 前端: 用戶端:vue、iview admin端:vue、...

    newtrek 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<