在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ eggjs怎么實(shí)現(xiàn)任何字段模型的方法?

eggjs怎么實(shí)現(xiàn)任何字段模型的方法?

我最近玩了strapi框架,認(rèn)識到了這個結(jié)構(gòu)最好的地方是,一,任何字段模型,二,可擴(kuò)展插件。其中,這個任何字段模型的方法有點(diǎn)復(fù)雜,我還沒摸清好幾十天,估計是剛接觸到后端技術(shù)還沒有知道那么多。

參考 strapi 任何字段模型

圖片描述

即使選擇好了幾個類型,這些類型會保存到數(shù)據(jù)庫新表,比如建立article表,article的字段會有對應(yīng)類型,這樣結(jié)構(gòu)挺好靈活,不用每次手動增加mvc之類的代碼,直接存好數(shù)據(jù)庫。

比如創(chuàng)建一張文章表,文章表還沒有加入字段模型,那么在后臺里面選擇字符串、日期、數(shù)字來做成標(biāo)題,作者。。。之類,然后就會建立類似MVC模式的結(jié)構(gòu),自然會保存到那張文章表。

這個結(jié)構(gòu)值得我參考,不過我不知道這個方法怎么實(shí)現(xiàn)?

我目前做的是采用eggjs這個框架,那么在eggjs里面怎么實(shí)現(xiàn)這個字段模型方法?

最后一句話:我希望您現(xiàn)在就是我的好老師!謝謝!

回答
編輯回答
款爺
  1. 簡單分析一下題意,你的意思應(yīng)該是指:
    1.1 通過【圖形化的界面】添加【數(shù)據(jù)表中的屬性列】。產(chǎn)生的效果就是【MongoDB中出現(xiàn)對應(yīng)的數(shù)據(jù)表(table_article)】,同時框架文件夾中生成了【對應(yīng)的數(shù)據(jù)模型(article.model)】
    1.2 糾正你的說法,應(yīng)該是strapi這個框架【整體采用了MVC設(shè)計范例】?!?.1】并不是生成了MVC的結(jié)構(gòu),只是生成了Model
  2. 如何實(shí)現(xiàn)【1.1】所說的效果?
    2.1 雖然給你的感覺是通過【圖形化的界面】生成。但是始終離不開【命令行】的操作。在strapi的文檔中有專門介紹【CLI】的板塊,可以參考并搜索框架的源碼,始終是需要自己去探索的,別人都只是幫助你解釋概念而已
    2.2 strapi并不是第一個實(shí)現(xiàn)【1.1】方式的框架,Laravel同樣非常典型。如果你覺得strapi的英文文檔難以理解,可以去看一下Laravel的中文文檔。和strapi的【CLI】相同的,在Laravel中我們使用Artisan指令
    2.3 strapi使用的是MongoDB,你同時可能還需要看一下MongoDB文檔中的命令行指令
2018年8月30日 07:59
編輯回答
舊螢火

推薦用 egg-sequelize 文檔也很全

模型

// app/model/user.js

module.exports = app => {
  const { STRING, INTEGER, DATE } = app.Sequelize;

  const User = app.model.define('user', {
    login: STRING,
    name: STRING(30),
    password: STRING(32),
    age: INTEGER,
    last_sign_in_at: DATE,
    created_at: DATE,
    updated_at: DATE,
  });

  User.findByLogin = function* (login) {
    return yield this.findOne({
      where: {
        login: login
      }
    });
  }

  User.prototype.logSignin = function* () {
    yield this.update({ last_sign_in_at: new Date() });
  }

  return User;
};

控制器

// app/controller/user.js
module.exports = app => {
  return class UserController extends app.Controller {
    * index() {
      const users = yield this.ctx.model.User.findAll();
      this.ctx.body = users;
    }

    * show() {
      const user = yield this.ctx.model.User.findByLogin(this.ctx.params.login);
      yield user.logSignin();
      this.ctx.body = user;
    }
  }
}
2017年2月27日 07:18
編輯回答
傻叼

謝邀,簡單說兩句。目前 Egg.js 里面 Model 層的編寫比較混亂,沒有一個較為統(tǒng)一的方案,各自 ORM 插件也各自為戰(zhàn),限制較多,多 ORM 共存時也存在較大的兼容性問題。具體可以參考:RFC-1775 重定義 Model 層,我個人目前采用的是 egg-sequelize,個人覺得還是比較好用,sequelize 文檔也比較全。

2018年6月14日 09:48