比特派最新下载地址|egg

作者: 比特派最新下载地址
2024-03-07 18:28:52

快速入门 - Egg

快速入门 - Egg

框架开发 - Egg

框架开发 - Egg

Egg@2 升级指南 - Egg

Egg@2 升级指南 - Egg

学习egg.js,看这一篇就够了! - 掘金

学习egg.js,看这一篇就够了! - 掘金

首页 首页

沸点

课程

直播

活动

竞赛

商城

APP

插件 搜索历史

清空

创作者中心

写文章 发沸点 写笔记 写代码 草稿箱 创作灵感

查看更多

会员

登录

注册

学习egg.js,看这一篇就够了!

乔珂力

2021-08-11

21,791

egg 介绍

egg 是什么?

egg 是阿里出品的一款 node.js 后端 web 框架,基于 koa 封装,并做了一些约定。

为什么叫 egg ?

egg 有孕育的含义,因为 egg 的定位是企业级 web 基础框架,旨在帮助开发者孕育适合自己团队的框架。

哪些产品是用 egg 开发的?

语雀 就是用 egg 开发的,架构图如下:

哪些公司在用 egg?

盒马,转转二手车、PingWest、小米、58同城等(技术栈选型参考链接)

egg 支持 Typescript 吗?

虽然 egg 本身是用 JavaScript 写的,但是 egg 应用可以采用 Typescript 来写,使用下面的命令创建项目即可(参考链接):

$ npx egg-init --type=ts showcase

用 JavaScript 写 egg 会有智能提示吗?

会的,只要在 package.json 中添加下面的声明之后,会在项目根目录下动态生成 typings 目录,里面包含各种模型的类型声明(参考链接):

"egg": {

"declarations": true

}

egg 和 koa 是什么关系?

koa 是 egg 的基础框架,egg 是对 koa 的增强。

学习 egg 需要会 koa 吗?

不会 koa 也可以直接上手 egg,但是会 koa 的话有助于更深层次的理解 egg。

创建项目

我们采用基础模板、选择国内镜像创建一个 egg 项目:

$ npm init egg --type=simple --registry=china

# 或者 yarn create egg --type=simple --registry=china

解释一下 npm init egg 这种语法:

npm@6 版本引入了 npm-init 语法,等价于 npx create- 命令,而 npx 命令会去 $PATH 路径和 node_modules/.bin 路径下寻找名叫 create- 的可执行文件,如果找到了就执行,找不到就去安装。

也就是说,npm init egg 会去寻找或下载 create-egg 可执行文件,而 create-egg 包就是 egg-init 包的别名,相当于调用了 egg-init 。

创建完毕之后,目录结构如下(忽略 README文件 和 test 目录):

├── app

│   ├── controller

│   │   └── home.js

│   └── router.js

├── config

│   ├── config.default.js

│   └── plugin.js

├── package.json

这就是最小化的 egg 项目,用 npm i 或 yarn 安装依赖之后,执行启动命令:

$ npm run dev

[master] node version v14.15.1

[master] egg version 2.29.1

[master] agent_worker#1:23135 started (842ms)

[master] egg started on http://127.0.0.1:7001 (1690ms)

打开 http://127.0.0.1:7001/ 会看到网页上显示 hi, egg 。

目录约定

上面创建的项目只是最小化结构,一个典型的 egg 项目有如下目录结构:

egg-project

├── package.json

├── app.js (可选)

├── agent.js (可选)

├── app/

| ├── router.js # 用于配置 URL 路由规则

│ ├── controller/ # 用于存放控制器(解析用户的输入、加工处理、返回结果)

│ ├── model/ (可选) # 用于存放数据库模型

│ ├── service/ (可选) # 用于编写业务逻辑层

│ ├── middleware/ (可选) # 用于编写中间件

│ ├── schedule/ (可选) # 用于设置定时任务

│ ├── public/ (可选) # 用于放置静态资源

│ ├── view/ (可选) # 用于放置模板文件

│ └── extend/ (可选) # 用于框架的扩展

│ ├── helper.js (可选)

│ ├── request.js (可选)

│ ├── response.js (可选)

│ ├── context.js (可选)

│ ├── application.js (可选)

│ └── agent.js (可选)

├── config/

| ├── plugin.js # 用于配置需要加载的插件

| ├── config.{env}.js # 用于编写配置文件(env 可以是 default,prod,test,local,unittest)

这是由 egg 框架或内置插件约定好的,是阿里总结出来的最佳实践,虽然框架也提供了让用户自定义目录结构的能力,但是依然建议大家采用阿里的这套方案。在接下来的篇章当中,会逐一讲解上述约定目录和文件的作用。

路由(Router)

路由定义了 请求路径(URL) 和 控制器(Controller) 之间的映射关系,即用户访问的网址应交由哪个控制器进行处理。我们打开 app/router.js 看一下:

module.exports = app => {

const { router, controller } = app

router.get('/', controller.home.index)

};

可以看到,路由文件导出了一个函数,接收 app 对象作为参数,通过下面的语法定义映射关系:

router.verb('path-match', controllerAction)

其中 verb 一般是 HTTP 动词的小写,例如:

HEAD - router.head

OPTIONS - router.options

GET - router.get

PUT - router.put

POST - router.post

PATCH - router.patch

DELETE - router.delete 或 router.del

除此之外,还有一个特殊的动词 router.redirect 表示重定向。

而 controllerAction 则是通过点(·)语法指定 controller 目录下某个文件内的某个具体函数,例如:

controller.home.index // 映射到 controller/home.js 文件的 index 方法

controller.v1.user.create // controller/v1/user.js 文件的 create 方法

下面是一些示例及其解释:

module.exports = app => {

const { router, controller } = app

// 当用户访问 news 会交由 controller/news.js 的 index 方法进行处理

router.get('/news', controller.news.index)

// 通过冒号 `:x` 来捕获 URL 中的命名参数 x,放入 ctx.params.x

router.get('/user/:id/:name', controller.user.info)

// 通过自定义正则来捕获 URL 中的分组参数,放入 ctx.params 中

router.get(/^\/package\/([\w-.]+\/[\w-.]+)$/, controller.package.detail)

}

除了使用动词的方式创建路由之外,egg 还提供了下面的语法快速生成 CRUD 路由:

// 对 posts 按照 RESTful 风格映射到控制器 controller/posts.js 中

router.resources('posts', '/posts', controller.posts)

会自动生成下面的路由:

HTTP方法请求路径路由名称控制器函数GET/postspostsapp.controller.posts.indexGET/posts/newnew_postapp.controller.posts.newGET/posts/:idpostapp.controller.posts.showGET/posts/:id/editedit_postapp.controller.posts.editPOST/postspostsapp.controller.posts.createPATCH/posts/:idpostapp.controller.posts.updateDELETE/posts/:idpostapp.controller.posts.destroy只需要到 controller 中实现对应的方法即可。

当项目越来越大之后,路由映射会越来越多,我们可能希望能够将路由映射按照文件进行拆分,这个时候有两种办法:

手动引入,即把路由文件写到 app/router 目录下,然后再 app/router.js 中引入这些文件。示例代码:

// app/router.js

module.exports = app => {

require('./router/news')(app)

require('./router/admin')(app)

};

// app/router/news.js

module.exports = app => {

app.router.get('/news/list', app.controller.news.list)

app.router.get('/news/detail', app.controller.news.detail)

};

// app/router/admin.js

module.exports = app => {

app.router.get('/admin/user', app.controller.admin.user)

app.router.get('/admin/log', app.controller.admin.log)

};

使用 egg-router-plus 插件自动引入 app/router/**/*.js,并且提供了 namespace 功能:

// app/router.js

module.exports = app => {

const subRouter = app.router.namespace('/sub')

subRouter.get('/test', app.controller.sub.test) // 最终路径为 /sub/test

}

除了 HTTP verb 之外,Router 还提供了一个 redirect 方法,用于内部重定向,例如:

module.exports = app => {

app.router.get('index', '/home/index', app.controller.home.index)

app.router.redirect('/', '/home/index', 302)

}

中间件(Middleware)

egg 约定一个中间件是一个放置在 app/middleware 目录下的单独文件,它需要导出一个普通的函数,该函数接受两个参数:

options: 中间件的配置项,框架会将 app.config[${middlewareName}] 传递进来。

app: 当前应用 Application 的实例。

我们新建一个 middleware/slow.js 慢查询中间件,当请求时间超过我们指定的阈值,就打印日志,代码为:

module.exports = (options, app) => {

return async function (ctx, next) {

const startTime = Date.now()

await next()

const consume = Date.now() - startTime

const { threshold = 0 } = options || {}

if (consume > threshold) {

console.log(`${ctx.url}请求耗时${consume}毫秒`)

}

}

}

然后在 config.default.js 中使用:

module.exports = {

// 配置需要的中间件,数组顺序即为中间件的加载顺序

middleware: [ 'slow' ],

// slow 中间件的 options 参数

slow: {

enable: true

},

}

这里配置的中间件是全局启用的,如果只是想在指定路由中使用中间件的话,例如只针对 /api 前缀开头的 url 请求使用某个中间件的话,有两种方式:

在 config.default.js 配置中设置 match 或 ignore 属性:

module.exports = {

middleware: [ 'slow' ],

slow: {

threshold: 1,

match: '/api'

},

};

在路由文件 router.js 中引入

module.exports = app => {

const { router, controller } = app

// 在 controller 处理之前添加任意中间件

router.get('/api/home', app.middleware.slow({ threshold: 1 }), controller.home.index)

}

egg 把中间件分成应用层定义的中间件(app.config.appMiddleware)和框架默认中间件(app.config.coreMiddleware),我们打印看一下:

module.exports = app => {

const { router, controller } = app

console.log(app.config.appMiddleware)

console.log(app.config.coreMiddleware)

router.get('/api/home', app.middleware.slow({ threshold: 1 }), controller.home.index)

}

结果是:

// appMiddleware

[ 'slow' ]

// coreMiddleware

[

'meta',

'siteFile',

'notfound',

'static',

'bodyParser',

'overrideMethod',

'session',

'securities',

'i18n',

'eggLoaderTrace'

]

其中那些 coreMiddleware 是 egg 帮我们内置的中间件,默认是开启的,如果不想用,可以通过配置的方式进行关闭:

module.exports = {

i18n: {

enable: false

}

}

控制器(Controller)

Controller 负责解析用户的输入,处理后返回相应的结果,一个最简单的 helloworld 示例:

const { Controller } = require('egg');

class HomeController extends Controller {

async index() {

const { ctx } = this;

ctx.body = 'hi, egg';

}

}

module.exports = HomeController;

当然,我们实际项目中的代码不会这么简单,通常情况下,在 Controller 中会做如下几件事情:

接收、校验、处理 HTTP 请求参数

向下调用服务(Service)处理业务

通过 HTTP 将结果响应给用户

一个真实的案例如下:

const { Controller } = require('egg');

class PostController extends Controller {

async create() {

const { ctx, service } = this;

const createRule = {

title: { type: 'string' },

content: { type: 'string' },

};

// 校验和组装参数

ctx.validate(createRule);

const data = Object.assign(ctx.request.body, { author: ctx.session.userId });

// 调用 Service 进行业务处理

const res = await service.post.create(data);

// 响应客户端数据

ctx.body = { id: res.id };

ctx.status = 201;

}

}

module.exports = PostController;

由于 Controller 是类,因此可以通过自定义基类的方式封装常用方法,例如:

// app/core/base_controller.js

const { Controller } = require('egg');

class BaseController extends Controller {

get user() {

return this.ctx.session.user;

}

success(data) {

this.ctx.body = { success: true, data };

}

notFound(msg) {

this.ctx.throw(404, msg || 'not found');

}

}

module.exports = BaseController;

然后让所有 Controller 继承这个自定义的 BaseController:

// app/controller/post.js

const Controller = require('../core/base_controller');

class PostController extends Controller {

async list() {

const posts = await this.service.listByUser(this.user);

this.success(posts);

}

}

在 Controller 中通过 this.ctx 可以获取上下文对象,方便获取和设置相关参数,例如:

ctx.query:URL 中的请求参数(忽略重复 key)

ctx.quries:URL 中的请求参数(重复的 key 被放入数组中)

ctx.params:Router 上的命名参数

ctx.request.body:HTTP 请求体中的内容

ctx.request.files:前端上传的文件对象

ctx.getFileStream():获取上传的文件流

ctx.multipart():获取 multipart/form-data 数据

ctx.cookies:读取和设置 cookie

ctx.session:读取和设置 session

ctx.service.xxx:获取指定 service 对象的实例(懒加载)

ctx.status:设置状态码

ctx.body:设置响应体

ctx.set:设置响应头

ctx.redirect(url):重定向

ctx.render(template):渲染模板

this.ctx 上下文对象是 egg 框架和 koa 框架中最重要的一个对象,我们要弄清楚该对象的作用,不过需要注意的是,有些属性并非直接挂在 app.ctx 对象上,而是代理了 request 或 response 对象的属性,我们可以用 Object.keys(ctx) 看一下:

[

'request', 'response', 'app', 'req', 'res', 'onerror', 'originalUrl', 'starttime', 'matched',

'_matchedRoute', '_matchedRouteName', 'captures', 'params', 'routerName', 'routerPath'

]

服务(Service)

Service 是具体业务逻辑的实现,一个封装好的 Service 可供多个 Controller 调用,而一个 Controller 里面也可以调用多个 Service,虽然在 Controller 中也可以写业务逻辑,但是并不建议这么做,代码中应该保持 Controller 逻辑简洁,仅仅发挥「桥梁」作用。

Controller 可以调用任何一个 Service 上的任何方法,值得注意的是:Service 是懒加载的,即只有当访问到它的时候框架才会去实例化它。

通常情况下,在 Service 中会做如下几件事情:

处理复杂业务逻辑

调用数据库或第三方服务(例如 GitHub 信息获取等)

一个简单的 Service 示例,将数据库中的查询结果返回出去:

// app/service/user.js

const { Service } = require('egg').Service;

class UserService extends Service {

async find(uid) {

const user = await this.ctx.db.query('select * from user where uid = ?', uid);

return user;

}

}

module.exports = UserService;

在 Controller 中可以直接调用:

class UserController extends Controller {

async info() {

const { ctx } = this;

const userId = ctx.params.id;

const userInfo = await ctx.service.user.find(userId);

ctx.body = userInfo;

}

}

注意,Service 文件必须放在 app/service 目录,支持多级目录,访问的时候可以通过目录名级联访问:

app/service/biz/user.js => ctx.service.biz.user

app/service/sync_user.js => ctx.service.syncUser

app/service/HackerNews.js => ctx.service.hackerNews

Service 里面的函数,可以理解为某个具体业务逻辑的最小单元,Service 里面也可以调用其他 Service,值得注意的是:Service 不是单例,是 请求级别 的对象,框架在每次请求中首次访问 ctx.service.xx 时延迟实例化,所以 Service 中可以通过 this.ctx 获取到当前请求的上下文。

模板渲染

egg 框架内置了 egg-view 作为模板解决方案,并支持多种模板渲染,例如 ejs、handlebars、nunjunks 等模板引擎,每个模板引擎都以插件的方式引入,默认情况下,所有插件都会去找 app/view 目录下的文件,然后根据 config\config.default.js 中定义的后缀映射来选择不同的模板引擎:

config.view = {

defaultExtension: '.nj',

defaultViewEngine: 'nunjucks',

mapping: {

'.nj': 'nunjucks',

'.hbs': 'handlebars',

'.ejs': 'ejs',

},

}

上面的配置表示,当文件:

后缀是 .nj 时使用 nunjunks 模板引擎

后缀是 .hbs 时使用 handlebars 模板引擎

后缀是 .ejs 时使用 ejs 模板引擎

当未指定后缀时默认为 .html

当未指定模板引擎时默认为 nunjunks

接下来我们安装模板引擎插件:

$ npm i egg-view-nunjucks egg-view-ejs egg-view-handlebars --save

# 或者 yarn add egg-view-nunjucks egg-view-ejs egg-view-handlebars

然后在 config/plugin.js 中启用该插件:

exports.nunjucks = {

enable: true,

package: 'egg-view-nunjucks',

}

exports.handlebars = {

enable: true,

package: 'egg-view-handlebars',

}

exports.ejs = {

enable: true,

package: 'egg-view-ejs',

}

然后添加 app/view 目录,里面增加几个文件:

app/view

├── ejs.ejs

├── handlebars.hbs

└── nunjunks.nj

代码分别是:

ejs

    <% items.forEach(function(item){ %>

  • <%= item.title %>
  • <% }); %>

handlebars

{{#each items}}

  • {{title}}
  • {{~/each}}

    nunjunks

      {% for item in items %}

    • {{ item.title }}
    • {% endfor %}

    然后在 Router 中配置路由:

    module.exports = app => {

    const { router, controller } = app

    router.get('/ejs', controller.home.ejs)

    router.get('/handlebars', controller.home.handlebars)

    router.get('/nunjunks', controller.home.nunjunks)

    }

    接下来实现 Controller 的逻辑:

    const Controller = require('egg').Controller

    class HomeController extends Controller {

    async ejs() {

    const { ctx } = this

    const items = await ctx.service.view.getItems()

    await ctx.render('ejs.ejs', {items})

    }

    async handlebars() {

    const { ctx } = this

    const items = await ctx.service.view.getItems()

    await ctx.render('handlebars.hbs', {items})

    }

    async nunjunks() {

    const { ctx } = this

    const items = await ctx.service.view.getItems()

    await ctx.render('nunjunks.nj', {items})

    }

    }

    module.exports = HomeController

    我们把数据放到了 Service 里面:

    const { Service } = require('egg')

    class ViewService extends Service {

    getItems() {

    return [

    { title: 'foo', id: 1 },

    { title: 'bar', id: 2 },

    ]

    }

    }

    module.exports = ViewService

    访问下面的地址可以查看不同模板引擎渲染出的结果:

    GET http://localhost:7001/nunjunks

    GET http://localhost:7001/handlebars

    GET http://localhost:7001/ejs

    你可能会问,ctx.render 方法是哪来的呢?没错,是由 egg-view 对 context 进行扩展而提供的,为 ctx 上下文对象增加了 render、renderView 和 renderString 三个方法,代码如下:

    const ContextView = require('../../lib/context_view')

    const VIEW = Symbol('Context#view')

    module.exports = {

    render(...args) {

    return this.renderView(...args).then(body => {

    this.body = body;

    })

    },

    renderView(...args) {

    return this.view.render(...args);

    },

    renderString(...args) {

    return this.view.renderString(...args);

    },

    get view() {

    if (this[VIEW]) return this[VIEW]

    return this[VIEW] = new ContextView(this)

    }

    }

    它内部最终会把调用转发给 ContextView 实例上的 render 方法,ContextView 是一个能够根据配置里面定义的 mapping,帮助我们找到对应渲染引擎的类。

    插件

    上节课讲解模板渲染的时候,我们已经知道如何使用插件了,即只需要在应用或框架的 config/plugin.js 中声明:

    exports.myPlugin = {

    enable: true, // 是否开启

    package: 'egg-myPlugin', // 从 node_modules 中引入

    path: path.join(__dirname, '../lib/plugin/egg-mysql'), // 从本地目录中引入

    env: ['local', 'unittest', 'prod'], // 只有在指定运行环境才能开启

    }

    开启插件后,就可以使用插件提供的功能了:

    app.myPlugin.xxx()

    如果插件包含需要用户自定义的配置,可以在 config.default.js 进行指定,例如:

    exports.myPlugin = {

    hello: 'world'

    }

    一个插件其实就是一个『迷你的应用』,包含了 Service、中间件、配置、框架扩展等,但是没有独立的 Router 和 Controller,也不能定义自己的 plugin.js。

    在开发中必不可少要连接数据库,最实用的插件就是数据库集成的插件了。

    集成 MongoDB

    首先确保电脑中已安装并启动 MongoDB 数据库,如果是 Mac 电脑,可以用下面的命令快速安装和启动:

    $ brew install mongodb-community

    $ brew services start mongodb/brew/mongodb-community # 后台启动

    # 或者使用 mongod --config /usr/local/etc/mongod.conf 前台启动

    然后安装 egg-mongoose 插件:

    $ npm i egg-mongoose

    # 或者 yarn add egg-mongoose

    在 config/plugin.js 中开启插件:

    exports.mongoose = {

    enable: true,

    package: 'egg-mongoose',

    }

    在 config/config.default.js 中定义连接参数:

    config.mongoose = {

    client: {

    url: 'mongodb://127.0.0.1/example',

    options: {}

    }

    }

    然后在 model/user.js 中定义模型:

    module.exports = app => {

    const mongoose = app.mongoose

    const UserSchema = new mongoose.Schema(

    {

    username: {type: String, required: true, unique: true}, // 用户名

    password: {type: String, required: true}, // 密码

    },

    { timestamps: true } // 自动生成 createdAt 和 updatedAt 时间戳

    )

    return mongoose.model('user', UserSchema)

    }

    在控制器中调用 mongoose 的方法:

    const {Controller} = require('egg')

    class UserController extends Controller {

    // 用户列表 GET /users

    async index() {

    const {ctx} = this

    ctx.body = await ctx.model.User.find({})

    }

    // 用户详情 GET /users/:id

    async show() {

    const {ctx} = this

    ctx.body = await ctx.model.User.findById(ctx.params.id)

    }

    // 创建用户 POST /users

    async create() {

    const {ctx} = this

    ctx.body = await ctx.model.User.create(ctx.request.body)

    }

    // 更新用户 PUT /users/:id

    async update() {

    const {ctx} = this

    ctx.body = await ctx.model.User.findByIdAndUpdate(ctx.params.id, ctx.request.body)

    }

    // 删除用户 DELETE /users/:id

    async destroy() {

    const {ctx} = this

    ctx.body = await ctx.model.User.findByIdAndRemove(ctx.params.id)

    }

    }

    module.exports = UserController

    最后配置 RESTful 路由映射:

    module.exports = app => {

    const {router, controller} = app

    router.resources('users', '/users', controller.user)

    }

    集成 MySQL

    首先确保电脑中已安装 MySQL 数据库,如果是 Mac 电脑,可通过下面的命令快速安装和启动:

    $ brew install mysql

    $ brew services start mysql # 后台启动

    # 或者 mysql.server start 前台启动

    $ mysql_secure_installation # 设置密码

    官方有个 egg-mysql 插件,可以连接 MySQL 数据库,使用方法非常简单:

    $ npm i egg-mysql

    # 或者 yarn add egg-mysql

    在 config/plugin.js 中开启插件:

    exports.mysql = {

    enable: true,

    package: 'egg-mysql',

    }

    在 config/config.default.js 中定义连接参数:

    config.mysql = {

    client: {

    host: 'localhost',

    port: '3306',

    user: 'root',

    password: 'root',

    database: 'cms',

    }

    }

    然后就能在 Controller 或 Service 的 app.mysql 中获取到 mysql 对象,例如:

    class UserService extends Service {

    async find(uid) {

    const user = await this.app.mysql.get('users', { id: 11 });

    return { user }

    }

    }

    如果启动的时候报错:

    ERROR 5954 nodejs.ER_NOT_SUPPORTED_AUTH_MODEError: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

    是因为你使用了 MySQL 8.x 版本,而 egg-mysql 依赖了 ali-rds 这个包,这是阿里自己封装的包,里面又依赖了 mysql 这个包,而这个包已经废弃,不支持 caching_sha2_password 加密方式导致的。可以在 MySQL workbench 中运行下面的命令来解决:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

    flush privileges

    但是更好的集成 MySQL 的方式是借助 ORM 框架来帮助我们管理数据层的代码,sequelize 是当前最流行的 ORM 框架,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多个数据源,接下来我们使用 sequelize 来连接 MySQL 数据库,首先安装依赖:

    npm install egg-sequelize mysql2 --save

    yarn add egg-sequelize mysql2

    然后在 config/plugin.js 中开启 egg-sequelize 插件:

    exports.sequelize = {

    enable: true,

    package: 'egg-sequelize',

    }

    同样要在 config/config.default.js 中编写 sequelize 配置

    config.sequelize = {

    dialect: 'mysql',

    host: '127.0.0.1',

    port: 3306,

    database: 'example',

    }

    然后在 egg_example 库中创建 books 表:

    CREATE TABLE `books` (

    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',

    `name` varchar(30) DEFAULT NULL COMMENT 'book name',

    `created_at` datetime DEFAULT NULL COMMENT 'created time',

    `updated_at` datetime DEFAULT NULL COMMENT 'updated time',

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='book';

    创建 model/book.js 文件,代码是:

    module.exports = app => {

    const { STRING, INTEGER } = app.Sequelize

    const Book = app.model.define('book', {

    id: { type: INTEGER, primaryKey: true, autoIncrement: true },

    name: STRING(30),

    })

    return Book

    }

    添加 controller/book.js 控制器:

    const Controller = require('egg').Controller

    class BookController extends Controller {

    async index() {

    const ctx = this.ctx

    ctx.body = await ctx.model.Book.findAll({})

    }

    async show() {

    const ctx = this.ctx

    ctx.body = await ctx.model.Book.findByPk(+ctx.params.id)

    }

    async create() {

    const ctx = this.ctx

    ctx.body = await ctx.model.Book.create(ctx.request.body)

    }

    async update() {

    const ctx = this.ctx

    const book = await ctx.model.Book.findByPk(+ctx.params.id)

    if (!book) return (ctx.status = 404)

    await book.update(ctx.request.body)

    ctx.body = book

    }

    async destroy() {

    const ctx = this.ctx

    const book = await ctx.model.Book.findByPk(+ctx.params.id)

    if (!book) return (ctx.status = 404)

    await book.destroy()

    ctx.body = book

    }

    }

    module.exports = BookController

    最后配置 RESTful 路由映射:

    module.exports = app => {

    const {router, controller} = app

    router.resources('books', '/books', controller.book)

    }

    自定义插件

    掌握了插件的使用,接下来就要讲讲如何自己写插件了,首先根据插件脚手架模板创建一个插件项目:

    npm init egg --type=plugin

    # 或者 yarn create egg --type=plugin

    默认的目录结构为:

    ├── config

    │ └── config.default.js

    ├── package.json

    插件没有独立的 router 和 controller,并且需要在 package.json 中的 eggPlugin 节点指定插件特有的信息,例如:

    {

    "eggPlugin": {

    "name": "myPlugin",

    "dependencies": [ "registry" ],

    "optionalDependencies": [ "vip" ],

    "env": [ "local", "test", "unittest", "prod" ]

    }

    }

    上述字段的含义为:

    name - 插件名,配置依赖关系时会指定依赖插件的 name。

    dependencies - 当前插件强依赖的插件列表(如果依赖的插件没找到,应用启动失败)。

    optionalDependencies - 当前插件的可选依赖插件列表(如果依赖的插件未开启,只会 warning,不会影响应用启动)。

    env - 指定在某些运行环境才开启当前插件

    那插件里面能做什么呢?

    扩展内置对象:跟应用一样,在 app/extend/ 目录下定义 request.js、response.js 等文件。

    例如 egg-bcrypt 库只是简单的对 extend.js 进行了扩展:

    在项目中直接调用 ctx.genHash(plainText) 和 ctx.compare(plainText, hash) 即可。

    插入自定义中间件:在 app/middleware 中写中间件,在 app.js 中使用

    例如 egg-cors 库就是定义了一个 cors.js 中间件,该中间件就是原封不动的用了 koa-cors

    直接在 config/config.default.js 中进行配置,例如:

    exports.cors = {

    origin: '*',

    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'

    }

    在启动时做一些初始化工作:在 app.js 中添加同步或异步初始化代码

    例如 egg-elasticsearch 代码:

    只是在启动前建立了一个 ES 连接而已,beforeStart 方法中还可以定义异步启动逻辑,虽然上面的代码是同步的,即用不用 beforeStart 封装都无所谓,但是如果有异步逻辑的话,可以封装一个 async 函数。

    设置定时任务:在 app/schedule/ 目录下添加定时任务,定时任务下一节会详细讲。

    定时任务

    一个复杂的业务场景中,不可避免会有定时任务的需求,例如:

    每天检查一下是否有用户过生日,自动发送生日祝福

    每天备份一下数据库,防止操作不当导致数据丢失

    每周删除一次临时文件,释放磁盘空间

    定时从远程接口获取数据,更新本地缓存

    egg 框架提供了定时任务功能,在 app/schedule 目录下,每一个文件都是一个独立的定时任务,可以配置定时任务的属性和要执行的方法,例如创建一个 update_cache.js 的更新缓存任务,每分钟执行一次:

    const Subscription = require('egg').Subscription

    class UpdateCache extends Subscription {

    // 通过 schedule 属性来设置定时任务的执行间隔等配置

    static get schedule() {

    return {

    interval: '1m', // 1 分钟间隔

    type: 'all', // 指定所有的 worker 都需要执行

    }

    }

    // subscribe 是真正定时任务执行时被运行的函数

    async subscribe() {

    const res = await this.ctx.curl('http://www.api.com/cache', {

    dataType: 'json',

    })

    this.ctx.app.cache = res.data

    }

    }

    module.exports = UpdateCache

    也就是说,egg 会从静态访问器属性 schedule 中获取定时任务的配置,然后按照配置来执行 subscribe 方法。执行任务的时机可以用 interval 或者 cron 两种方式来指定:

    interval 可以使数字或字符串,如果是数字则表示毫秒数,例如 5000 就是 5 秒,如果是字符类型,会通过 ms 这个包转换成毫秒数,例如 5 秒可以直接写成 5s。

    cron 表达式则通过 cron-parser 进行解析,语法为:

    * * * * * *

    ┬ ┬ ┬ ┬ ┬ ┬

    │ │ │ │ │ |

    │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)

    │ │ │ │ └───── month (1 - 12)

    │ │ │ └────────── day of month (1 - 31)

    │ │ └─────────────── hour (0 - 23)

    │ └──────────────────── minute (0 - 59)

    └───────────────────────── second (0 - 59, optional)

    执行任务的类型有两种:

    worker 类型:只有一个 worker 会执行这个定时任务(随机选择)

    all 类型:每个 worker 都会执行这个定时任务

    使用哪种类型要看具体的业务了,例如更新缓存的任务肯定是选择 all,而备份数据库的任务选择 worker 就够了,否则会重复备份。

    有一些场景我们可能需要手动的执行定时任务,例如应用启动时的初始化任务,可以通过 app.runSchedule(schedulePath) 来运行。app.runSchedule 接受一个定时任务文件路径(app/schedule 目录下的相对路径或者完整的绝对路径),在 app.js 中代码为:

    module.exports = app => {

    app.beforeStart(async () => {

    // 程序启动前确保缓存已更新

    await app.runSchedule('update_cache')

    })

    }

    错误处理

    在开发环境下会提供非常友好的可视化界面帮助开发者定位问题,例如当我们把 model.User 换成小写之后调用该方法:

    直接定位到错误所在的行,方便开发者快速调试。不过放心,在生产环境下,egg 不会把错误栈暴露给用户,而是返回下面的错误提示:

    Internal Server Error, real status: 500

    如果我们的项目是前后端分离的,所有返回都是 JSON 格式的话,可以在 config/plugin.js 中进行如下配置:

    module.exports = {

    onerror: {

    accepts: () => 'json',

    },

    };

    那么就会把错误调用栈直接以 JSON 的格式返回:

    {

    "message": "Cannot read property 'find' of undefined",

    "stack": "TypeError: Cannot read property 'find' of undefined\n at UserController.index (/Users/keliq/code/egg-project/app/controller/user.js:7:37)",

    "name": "TypeError",

    "status": 500

    }

    accepts 函数是 content negotiation 的思想的具体实现,即让用户自己决定以何种格式返回,这也体现了 egg 极大的灵活性,例如我们希望当 content-type 为 `` 的时候返回 JSON 格式,而其他情况下则返回 HTML,可以这么写:

    module.exports = {

    onerror: {

    accepts: (ctx) => {

    if (ctx.get('content-type') === 'application/json') return 'json';

    return 'html';

    }

    },

    };

    不过我们也可以在 config/config.default.js 中自定义错误:

    module.exports = {

    onerror: {

    errorPageUrl: '/public/error.html',

    },

    };

    此时生产环境的报错会被重定向到该路径,并在后面带上了参数 ?real_status=500。实际上,egg 的错误是由内置插件 egg-onerror 来处理的,一个请求的所有处理方法(Middleware、Controller、Service)中抛出的任何异常都会被它捕获,并自动根据请求想要获取的类型返回不同类型的错误:

    module.exports = {

    onerror: {

    all(err, ctx) {

    // 在此处定义针对所有响应类型的错误处理方法

    // 注意,定义了 config.all 之后,其他错误处理方法不会再生效

    ctx.body = 'error'

    ctx.status = 500

    },

    html(err, ctx) { // 处理 html hander

    ctx.body = '

    error

    '

    ctx.status = 500

    },

    json(err, ctx) { // json hander

    ctx.body = {message: 'error'}

    ctx.status = 500

    },

    },

    }

    不过有一点需要注意的是:框架并不会将服务端返回的 404 状态当做异常来处理,egg 如果发现状态码是 404 且没有 body 时,会做出如下的默认响应:

    当请求为 JSON 时,会返回 JSON:{ "message": "Not Found" }

    当请求为 HTML 时,会返回 HTML:

    404 Not Found

    很多厂都是自己写 404 页面的,如果你也有这个需求,也可以自己写一个 HTML,然后在 config/config.default.js 中指定:

    module.exports = {

    notfound: {

    pageUrl: '/404.html',

    }

    }

    但是上面只是将默认的 HTML 请求的 404 响应重定向到指定的页面,如果你想和自定义异常处理一样,完全自定义服务器 404 时的响应,包括定制 JSON 返回的话,只需要加入一个 middleware/notfound_handler.js 中间件:

    module.exports = () => {

    return async function (ctx, next) {

    await next()

    if (ctx.status === 404 && !ctx.body) {

    ctx.body = ctx.acceptJSON ? { error: 'Not Found' } : '

    Page Not Found

    '

    }

    }

    }

    当然,别忘了在 config/config.default.js 中引入该中间件:

    config.middleware = ['notfoundHandler']

    生命周期

    在 egg 启动的过程中,提供了下面几个生命周期钩子方便大家调用:

    配置文件即将加载,这是最后动态修改配置的时机(configWillLoad)

    配置文件加载完成(configDidLoad)

    文件加载完成(didLoad)

    插件启动完毕(willReady)

    worker 准备就绪(didReady)

    应用启动完成(serverDidReady)

    应用即将关闭(beforeClose)

    只要在项目根目录中创建 app.js,添加并导出一个类即可:

    class AppBootHook {

    constructor(app) {

    this.app = app

    }

    configWillLoad() {

    // config 文件已经被读取并合并,但是还并未生效,这是应用层修改配置的最后时机

    // 注意:此函数只支持同步调用

    }

    configDidLoad() {

    // 所有的配置已经加载完毕,可以用来加载应用自定义的文件,启动自定义的服务

    }

    async didLoad() {

    // 所有的配置已经加载完毕,可以用来加载应用自定义的文件,启动自定义的服务

    }

    async willReady() {

    // 所有的插件都已启动完毕,但是应用整体还未 ready

    // 可以做一些数据初始化等操作,这些操作成功才会启动应用

    }

    async didReady() {

    // 应用已经启动完毕

    }

    async serverDidReady() {

    // http / https server 已启动,开始接受外部请求

    // 此时可以从 app.server 拿到 server 的实例

    }

    async beforeClose() {

    // 应用即将关闭

    }

    }

    module.exports = AppBootHook

    图解

    框架扩展

    egg 框架提供了下面几个扩展点:

    Application: Koa 的全局应用对象(应用级别),全局只有一个,在应用启动时被创建

    Context:Koa 的请求上下文对象(请求级别),每次请求生成一个 Context 实例

    Request:Koa 的 Request 对象(请求级别),提供请求相关的属性和方法

    Response:Koa 的 Response 对象(请求级别),提供响应相关的属性和方法

    Helper:用来提供一些实用的 utility 函数

    也就是说,开发者可以对上述框架内置对象进行任意扩展。扩展的写法为:

    const BAR = Symbol('bar')

    module.exports = {

    foo(param) {}, // 扩展方法

    get bar() { // 扩展属性

    if (!this[BAR]) {

    this[BAR] = this.get('x-bar')

    }

    return this[BAR]

    },

    }

    扩展点方法里面的 this 就指代扩展点对象自身,扩展的本质就是将用户自定义的对象合并到 Koa 扩展点对象的原型上面,即:

    扩展 Application 就是把 app/extend/application.js 中定义的对象与 Koa Application 的 prototype 对象进行合并,在应用启动时会基于扩展后的 prototype 生成 app 对象,可通过 ctx.app.xxx 来进行访问:

    扩展 Context 就是把 app/extend/context.js 中定义的对象与 Koa Context 的 prototype 对象进行合并,在处理请求时会基于扩展后的 prototype 生成 ctx 对象。

    扩展 Request/Response 就是把 app/extend/.js 中定义的对象与内置 request 或 response 的 prototype 对象进行合并,在处理请求时会基于扩展后的 prototype 生成request 或 response 对象。

    扩展 Helper 就是把 app/extend/helper.js 中定义的对象与内置 helper 的 prototype 对象进行合并,在处理请求时会基于扩展后的 prototype 生成 helper 对象。

    定制框架

    egg 最为强大的功能就是允许团队自定义框架,也就是说可以基于 egg 来封装上层框架,只需要扩展两个类:

    Application:App Worker 启动时会实例化 Application,单例

    Agent:Agent Worker 启动的时候会实例化 Agent,单例

    定制框架步骤:

    npm init egg --type=framework --registry=china

    # 或者 yarn create egg --type=framework --registry=china

    生成如下目录结构:

    ├── app

    │   ├── extend

    │   │   ├── application.js

    │   │   └── context.js

    │   └── service

    │   └── test.js

    ├── config

    │   ├── config.default.js

    │   └── plugin.js

    ├── index.js

    ├── lib

    │   └── framework.js

    ├── package.json

    可以看到,除了多了一个 lib 目录之外,其他的结构跟普通的 egg 项目并没有任何区别,我们看一下 lib/framework.js 中的代码:

    const path = require('path')

    const egg = require('egg')

    const EGG_PATH = Symbol.for('egg#eggPath')

    class Application extends egg.Application {

    get [EGG_PATH]() {

    return path.dirname(__dirname)

    }

    }

    class Agent extends egg.Agent {

    get [EGG_PATH]() {

    return path.dirname(__dirname)

    }

    }

    module.exports = Object.assign(egg, {

    Application,

    Agent,

    })

    可以看到,只是自定义了 Application 和 Agent 两个类,然后挂载到 egg 对象上面而已。而这两个自定义的类里面将访问器属性 Symbol.for('egg#eggPath') 赋值为 path.dirname(__dirname),也就是框架的根目录。为了能够在本地测试自定义框架,我们首先去框架项目(假设叫 my-framework)下运行:

    npm link # 或者 yarn link

    然后到 egg 项目下运行:

    npm link my-framework

    最后在 egg 项目的 package.json 中添加下面的代码即可:

    "egg": {

    "framework": "my-framework"

    },

    自定义框架的实现原理是基于类的继承,每一层框架都必须继承上一层框架并且指定 eggPath,然后遍历原型链就能获取每一层的框架路径,原型链下面的框架优先级更高,例如:部门框架(department)> 企业框架(enterprise)> Egg

    const Application = require('egg').Application

    // 继承 egg 的 Application

    class Enterprise extends Application {

    get [EGG_PATH]() {

    return '/path/to/enterprise'

    }

    }

    const Application = require('enterprise').Application

    // 继承 enterprise 的 Application

    class Department extends Application {

    get [EGG_PATH]() {

    return '/path/to/department'

    }

    }

    定时框架的好处就是层层递进的业务逻辑复用,不同部门框架直接用公司框架里面的写好的业务逻辑,然后补充自己的业务逻辑。虽然插件也能达到代码复用的效果,但是业务逻辑不好封装成插件,封装成框架会更好一些,下面就是应用、框架和插件的区别:

    文件应用框架插件package.json✅✅✅config/plugin.{env}.js✅✅❌config/config.{env}.js✅✅✅app/extend/application.js✅✅✅app/extend/request.js✅✅✅app/extend/response.js✅✅✅app/extend/context.js✅✅✅app/extend/helper.js✅✅✅agent.js✅✅✅app.js✅✅✅app/service✅✅✅app/middleware✅✅✅app/controller✅❌❌app/router.js✅❌❌

    除了使用 Symbol.for('egg#eggPath') 来指定当前框架的路径实现继承之外,还可以自定义加载器,只需要提供 Symbol.for('egg#loader') 访问器属性并自定义 AppWorkerLoader 即可:

    const path = require('path')

    const egg = require('egg')

    const EGG_PATH = Symbol.for('egg#eggPath')

    const EGG_LOADER = Symbol.for('egg#loader')

    class MyAppWorkerLoader extends egg.AppWorkerLoader {

    // 自定义的 AppWorkerLoader

    }

    class Application extends egg.Application {

    get [EGG_PATH]() {

    return path.dirname(__dirname)

    }

    get [EGG_LOADER]() {

    return MyAppWorkerLoader

    }

    }

    AppWorkerLoader 继承自 egg-core 的 EggLoader,它是一个基类,根据文件加载的规则提供了一些内置的方法,它本身并不会去调用这些方法,而是由继承类调用。

    loadPlugin()

    loadConfig()

    loadAgentExtend()

    loadApplicationExtend()

    loadRequestExtend()

    loadResponseExtend()

    loadContextExtend()

    loadHelperExtend()

    loadCustomAgent()

    loadCustomApp()

    loadService()

    loadMiddleware()

    loadController()

    loadRouter()

    也就是说我们自定义的 AppWorkerLoader 中可以重写这些方法:

    const {AppWorkerLoader} = require('egg')

    const {EggLoader} = require('egg-core')

    // 如果需要改变加载顺序,则需要继承 EggLoader,否则可以继承 AppWorkerLoader

    class MyAppWorkerLoader extends AppWorkerLoader {

    constructor(options) {

    super(options)

    }

    load() {

    super.load()

    console.log('自定义load逻辑')

    }

    loadPlugin() {

    super.loadPlugin()

    console.log('自定义plugin加载逻辑')

    }

    loadConfig() {

    super.loadConfig()

    console.log('自定义config加载逻辑')

    }

    loadAgentExtend() {

    super.loadAgentExtend()

    console.log('自定义agent extend加载逻辑')

    }

    loadApplicationExtend() {

    super.loadApplicationExtend()

    console.log('自定义application extend加载逻辑')

    }

    loadRequestExtend() {

    super.loadRequestExtend()

    console.log('自定义request extend加载逻辑')

    }

    loadResponseExtend() {

    super.loadResponseExtend()

    console.log('自定义response extend加载逻辑')

    }

    loadContextExtend() {

    super.loadContextExtend()

    console.log('自定义context extend加载逻辑')

    }

    loadHelperExtend() {

    super.loadHelperExtend()

    console.log('自定义helper extend加载逻辑')

    }

    loadCustomAgent() {

    super.loadCustomAgent()

    console.log('自定义custom agent加载逻辑')

    }

    loadCustomApp() {

    super.loadCustomApp()

    console.log('自定义custom app加载逻辑')

    }

    loadService() {

    super.loadService()

    console.log('自定义service加载逻辑')

    }

    loadMiddleware() {

    super.loadMiddleware()

    console.log('自定义middleware加载逻辑')

    }

    loadController() {

    super.loadController()

    console.log('自定义controller加载逻辑')

    }

    loadRouter() {

    super.loadRouter()

    console.log('自定义router加载逻辑')

    }

    }

    最后的输出结果为:

    自定义plugin加载逻辑

    自定义config加载逻辑

    自定义application extend加载逻辑

    自定义request extend加载逻辑

    自定义response extend加载逻辑

    自定义context extend加载逻辑

    自定义helper extend加载逻辑

    自定义custom app加载逻辑

    自定义service加载逻辑

    自定义middleware加载逻辑

    自定义controller加载逻辑

    自定义router加载逻辑

    自定义load逻辑

    从输出结果能够看出默认情况下的加载顺序。如此以来,框架的加载逻辑可以完全交给开发者,如何加载 Controller、Service、Router 等。

    乔珂力

    141

    文章

    389k

    阅读

    370

    粉丝 目录 收起

    egg 介绍

    egg 是什么?

    为什么叫 egg ?

    哪些产品是用 egg 开发的?

    哪些公司在用 egg?

    egg 支持 Typescript 吗?

    用 JavaScript 写 egg 会有智能提示吗?

    egg 和 koa 是什么关系?

    学习 egg 需要会 koa 吗?

    创建项目

    目录约定

    路由(Router)

    中间件(Middleware)

    控制器(Controller)

    服务(Service)

    模板渲染

    插件

    集成 MongoDB

    集成 MySQL

    自定义插件

    定时任务

    错误处理

    生命周期

    框架扩展

    定制框架

    友情链接:

    天劫医生 txt

    无毒小说网

    星 小说

    故人何以是情侣网名吗

    皇上皇后娘娘薨了第50章

    java 扫雷算法

    EGG中文(简体)翻译:剑桥词典

    EGG中文(简体)翻译:剑桥词典

    词典

    翻译

    语法

    同义词词典

    +Plus

    剑桥词典+Plus

    Shop

    剑桥词典+Plus

    我的主页

    +Plus 帮助

    退出

    剑桥词典+Plus

    我的主页

    +Plus 帮助

    退出

    登录

    /

    注册

    中文 (简体)

    查找

    查找

    英语-中文(简体)

    egg 在英语-中文(简体)词典中的翻译

    eggnoun uk

    Your browser doesn't support HTML5 audio

    /eɡ/ us

    Your browser doesn't support HTML5 audio

    /eɡ/

    egg noun

    (FOOD)

    Add to word list

    Add to word list

    A1 [ C or U ] the oval object with a hard shell that is produced by female birds, especially chickens, eaten as food

    (食用的)蛋(尤指鸡蛋)

    a hard-boiled/soft-boiled egg

    煮得老的/嫩的鸡蛋

    How do you like your eggs - fried or boiled?

    鸡蛋你想怎样吃?是吃煎的还是煮的?

    [ C ] an object that is made in the shape of a bird's egg

    蛋状物

    a chocolate/marble egg

    巧克力蛋/大理石球

    更多范例减少例句Mix the butter with the sugar and then add the egg.Crack three eggs into a bowl and mix them together.Could you get me half a dozen eggs when you go to the shop?We had bacon and eggs for breakfast.I like eggs lightly cooked so that the yolk is still runny.

    egg noun

    (REPRODUCTION)

    B2 [ C ] an oval object, often with a hard shell, that is produced by female birds and particular reptiles and insects, and contains a baby animal that comes out when it is developed

    (鸟类的)卵,蛋

    The cuckoo lays her egg in another bird's nest.

    杜鹃将卵产在别的鸟的巢里。

    After fourteen days the eggs hatch.

    14天后,卵孵化了。

    [ C ] a cell produced by a woman or female animal from which a baby can develop if it combines with a male sex cell

    卵,卵子;卵细胞

    Identical twins develop from a single fertilized egg that then splits into two.

    同卵双胞胎是由一个受精卵分裂发育而来的。

    更多范例减少例句Once an egg is fertilized by the sperm, it becomes an embryo.An attempt to implant an embryo using an egg from an anonymous woman donor was unsuccessful.Genes determine how we develop from the moment the sperm fuses with the egg.A blackbird's egg is blue with brown speckles on it.In human reproduction, one female egg is usually fertilized by one sperm.

    习语

    have egg on your face

    put all your eggs in one basket

    (egg在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)

    A1,B2

    egg的翻译

    中文(繁体)

    食物, (食用的)蛋(尤指雞蛋), 蛋狀物…

    查看更多内容

    西班牙语

    huevo, óvulo, huevo [masculine]…

    查看更多内容

    葡萄牙语

    ovo, ovo [masculine], óvulo [masculine]…

    查看更多内容

    更多语言

    in Marathi

    日语

    土耳其语

    法语

    加泰罗尼亚语

    in Dutch

    in Tamil

    in Hindi

    in Gujarati

    丹麦语

    in Swedish

    马来语

    德语

    挪威语

    in Urdu

    in Ukrainian

    俄语

    in Telugu

    阿拉伯语

    in Bengali

    捷克语

    印尼语

    泰语

    越南语

    波兰语

    韩语

    意大利语

    अंडी, अंडाकृती, अंडे…

    查看更多内容

    (ニワトリの)卵, 卵, 卵(たまご)…

    查看更多内容

    yumurta, (kuş, böcek vb.yavrusu taşıyan) yumurta…

    查看更多内容

    œuf [masculine], ovule [masculine], oeuf…

    查看更多内容

    ou…

    查看更多内容

    ei, eicel…

    查看更多内容

    பெண் பறவைகள், குறிப்பாக கோழிகள், மற்றும் உணவாக உண்ணப்படும் ஒரு கடினமான ஓட்டைக் கொண்ட ஓவல் (நீள்வட்ட) விடிவாலான பொருள்…

    查看更多内容

    अंडा, पक्षी के अंडे के आकार में बनी वस्तु, (किसी महिला या मादा पशु द्वारा निर्मित कोशिका) अंडा…

    查看更多内容

    ઈંડું, ઈંડાકારમાં, ઈંડા…

    查看更多内容

    æg, ægcelle…

    查看更多内容

    ägg…

    查看更多内容

    telur…

    查看更多内容

    das Ei, die Eizelle…

    查看更多内容

    egg [neuter], eggcelle [masculine], egg…

    查看更多内容

    انڈہ, بیضہ, بیضہ نما…

    查看更多内容

    яйце, яйцеклітина…

    查看更多内容

    яйцо, яйцеклетка…

    查看更多内容

    గుడ్డు, పక్షి గుడ్డు ఆకారంలో చేసిన వస్తువు, అండం…

    查看更多内容

    بَيْضة…

    查看更多内容

    ডিম, মুর্গীর ডিম, পাখির ডিমের আকারে তৈরি কোনো বস্তু…

    查看更多内容

    vejce, vajíčko…

    查看更多内容

    telur, sel telur…

    查看更多内容

    ไข่, ไข่ไก่, ไข่ของสัตว์เลี้ยงลูกด้วยนมตัวเมีย…

    查看更多内容

    quả trứng, trứng…

    查看更多内容

    jajko, jajo, jajeczko…

    查看更多内容

    달걀, 알…

    查看更多内容

    uovo, cellula uovo*…

    查看更多内容

    需要一个翻译器吗?

    获得快速、免费的翻译!

    翻译器工具

    egg的发音是什么?

    在英语词典中查看 egg 的释义

    浏览

    EFL

    egalitarian

    egalitarianism

    egestion

    egg

    egg cream

    egg cup

    egg flip

    egg roll

    egg更多的中文(简体)翻译

    全部

    egg cup

    egg flip

    egg roll

    egg yolk

    nest egg

    over-egg

    egg cream

    查看全部意思»

    词组动词

    egg someone on

    查看全部动词词组意思»

    惯用语

    curate's egg idiom

    can't boil an egg idiom

    over-egg the pudding idiom

    have egg on your face idiom

    a chicken and egg situation idiom

    kill the goose that lays the golden egg idiom

    查看全部惯用语意思»

    “每日一词”

    veggie burger

    UK

    Your browser doesn't support HTML5 audio

    /ˈvedʒ.i ˌbɜː.ɡər/

    US

    Your browser doesn't support HTML5 audio

    /ˈvedʒ.i ˌbɝː.ɡɚ/

    a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape

    关于这个

    博客

    Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)

    March 06, 2024

    查看更多

    新词

    stochastic parrot

    March 04, 2024

    查看更多

    已添加至 list

    回到页面顶端

    内容

    英语-中文(简体)翻译

    ©剑桥大学出版社与评估2024

    学习

    学习

    学习

    新词

    帮助

    纸质书出版

    Word of the Year 2021

    Word of the Year 2022

    Word of the Year 2023

    开发

    开发

    开发

    词典API

    双击查看

    搜索Widgets

    执照数据

    关于

    关于

    关于

    无障碍阅读

    剑桥英语教学

    剑桥大学出版社与评估

    授权管理

    Cookies与隐私保护

    语料库

    使用条款

    京ICP备14002226号-2

    ©剑桥大学出版社与评估2024

    剑桥词典+Plus

    我的主页

    +Plus 帮助

    退出

    词典

    定义

    清晰解释自然的书面和口头英语

    英语

    学习词典

    基础英式英语

    基础美式英语

    翻译

    点击箭头改变翻译方向。

    双语词典

    英语-中文(简体)

    Chinese (Simplified)–English

    英语-中文(繁体)

    Chinese (Traditional)–English

    英语-荷兰语

    荷兰语-英语

    英语-法语

    法语-英语

    英语-德语

    德语-英语

    英语-印尼语

    印尼语-英语

    英语-意大利语

    意大利语-英语

    英语-日语

    日语-英语

    英语-挪威语

    挪威语-英语

    英语-波兰语

    波兰语-英语

    英语-葡萄牙语

    葡萄牙语-英语

    英语-西班牙语

    西班牙语-英语

    English–Swedish

    Swedish–English

    半双语词典

    英语-阿拉伯语

    英语-孟加拉语

    英语-加泰罗尼亚语

    英语-捷克语

    英语-丹麦语

    English–Gujarati

    英语-印地语

    英语-韩语

    英语-马来语

    英语-马拉地语

    英语-俄语

    English–Tamil

    English–Telugu

    英语-泰语

    英语-土耳其语

    英语-乌克兰语

    English–Urdu

    英语-越南语

    翻译

    语法

    同义词词典

    Pronunciation

    剑桥词典+Plus

    Shop

    剑桥词典+Plus

    我的主页

    +Plus 帮助

    退出

    登录 /

    注册

    中文 (简体)  

    Change

    English (UK)

    English (US)

    Español

    Русский

    Português

    Deutsch

    Français

    Italiano

    中文 (简体)

    正體中文 (繁體)

    Polski

    한국어

    Türkçe

    日本語

    Tiếng Việt

    हिंदी

    தமிழ்

    తెలుగు

    关注我们

    选择一本词典

    最近的词和建议

    定义

    清晰解释自然的书面和口头英语

    英语

    学习词典

    基础英式英语

    基础美式英语

    语法与同义词词典

    对自然书面和口头英语用法的解释

    英语语法

    同义词词典

    Pronunciation

    British and American pronunciations with audio

    English Pronunciation

    翻译

    点击箭头改变翻译方向。

    双语词典

    英语-中文(简体)

    Chinese (Simplified)–English

    英语-中文(繁体)

    Chinese (Traditional)–English

    英语-荷兰语

    荷兰语-英语

    英语-法语

    法语-英语

    英语-德语

    德语-英语

    英语-印尼语

    印尼语-英语

    英语-意大利语

    意大利语-英语

    英语-日语

    日语-英语

    英语-挪威语

    挪威语-英语

    英语-波兰语

    波兰语-英语

    英语-葡萄牙语

    葡萄牙语-英语

    英语-西班牙语

    西班牙语-英语

    English–Swedish

    Swedish–English

    半双语词典

    英语-阿拉伯语

    英语-孟加拉语

    英语-加泰罗尼亚语

    英语-捷克语

    英语-丹麦语

    English–Gujarati

    英语-印地语

    英语-韩语

    英语-马来语

    英语-马拉地语

    英语-俄语

    English–Tamil

    English–Telugu

    英语-泰语

    英语-土耳其语

    英语-乌克兰语

    English–Urdu

    英语-越南语

    词典+Plus

    词汇表

    选择语言

    中文 (简体)  

    English (UK)

    English (US)

    Español

    Русский

    Português

    Deutsch

    Français

    Italiano

    正體中文 (繁體)

    Polski

    한국어

    Türkçe

    日本語

    Tiếng Việt

    हिंदी

    தமிழ்

    తెలుగు

    内容

    英语-中文(简体) 

     

    Noun 

    egg (FOOD)

    egg (REPRODUCTION)

    Translations

    语法

    所有翻译

    我的词汇表

    把egg添加到下面的一个词汇表中,或者创建一个新词汇表。

    更多词汇表

    前往词汇表

    对该例句有想法吗?

    例句中的单词与输入词条不匹配。

    该例句含有令人反感的内容。

    取消

    提交

    例句中的单词与输入词条不匹配。

    该例句含有令人反感的内容。

    取消

    提交

    egg的设计理念和底层实现架构模式_eggjs底层是node吗-CSDN博客

    >

    egg的设计理念和底层实现架构模式_eggjs底层是node吗-CSDN博客

    egg的设计理念和底层实现架构模式

    最新推荐文章于 2022-12-07 22:17:33 发布

    qdmoment

    最新推荐文章于 2022-12-07 22:17:33 发布

    阅读量1.6k

    收藏

    2

    点赞数

    分类专栏:

    架构

    egg

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/qdmoment/article/details/88713897

    版权

    架构

    同时被 2 个专栏收录

    16 篇文章

    0 订阅

    订阅专栏

    egg

    5 篇文章

    1 订阅

    订阅专栏

    在egg的官方文档上可以看到:

    Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。

    那么到底什么是egg呢?

    egg设计理念

    首先egg也是一款基于node的server web框架,但这个框架不同于koa2, express。

    1,egg不定制技术选型,专注于提供 Web 开发的核心功能和一套灵活可扩展的插件机制

    2,一个插件只做一件事

      比如 Nunjucks 模板封装成了 egg-view-nunjucks、MySQL 数据库封装成了 egg-mysql

    3,约定优于配置

      按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本

     

    和express,koa, sails 框架的区别

    Express 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。

    但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法

    egg基于koa

    sails和egg一样,奉行约定优于配置,可扩展性也很高,但是egg封装集成度没有sails高,sails集成了一些egg没有封装在框架内的插件。

    总的来说:

    egg有以下特性:

    提供基于 Egg 定制上层框架的能力

    高度可扩展的插件机制

    内置多进程管理

    基于 Koa 开发,性能优异

    框架稳定,测试覆盖率高

    渐进式开发

    egg底层架构实现模式:

    egg继承了koa框架;

    关于kao的设计模式,这里简单提及:

    支持async function(){}

    中间件选择洋葱圈模型

    context上继承response和request,贯穿整个请求

    egg基于koa的扩展:

    1,通过定义 app/extend/{application,context,request,response}.js 来扩展 Koa 中对应的四个对象的原型

    2,koa中是引入插件来做一些功能,比如koa-session koa-bodyparse

         egg针对这个功能提供插件机制:

    一个插件可以包含

    extend:扩展基础对象的上下文,提供各种工具类、属性。middleware:增加一个或多个中间件,提供请求的前置、后置处理逻辑。config:配置各个环境下插件自身的默认配置项。

     

    参考: https://eggjs.org/zh-cn/intro/egg-and-koa.html

     

     

     

     

     

     

    优惠劵

    qdmoment

    关注

    关注

    0

    点赞

    2

    收藏

    觉得还不错?

    一键收藏

    知道了

    0

    评论

    egg的设计理念和底层实现架构模式

    在egg的官方文档上可以看到:Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。那么到底什么是egg呢?egg设计理念首先egg也是一款基于node的server web框架,但这个框架不同于koa2, express。1,egg不定制技术选型,专注于提供 Web 开发的核心功能和一套灵活可扩展的插件机...

    复制链接

    扫一扫

    专栏目录

    Eggjs笔记:中间件配置、Post数据处理、安全机制CSRF防范、中间件模板全局变量配置

    Wang的专栏

    03-31

    819

    关于中间件

    中间件:匹配路由前、匹配路由完成做的一系列的操作

    Egg 是基于 Koa 实现的

    Egg 的中间件形式和 Koa 的中间件形式是一样的,都是基于洋葱圈模型

    Koa中的中间件:http://eggjs.org/zh-cn/intro/egg-and-koa.html#midlleware

    Egg中的中间件:http://eggjs.org/zh-cn/basics/middleware...

    egg运行原理

    Fuohua的博客

    08-01

    1417

    关于egg

    egg是阿里开源的一个框架,为企业级框架和应用而生,相较于express和koa,有更加严格的目录结构和规范,使得团队可以在基于egg定制化自己的需求或者根据egg封装出适合自己团队业务的更上层框架

    egg所处的定位

    天猪曾经在这篇优秀的博文中给出关于egg的定位,如下图:

    可以看到egg处于的是一个中间层的角色,基于koa,不同于koa以middle...

    参与评论

    您还未登录,请先

    登录

    后发表或查看评论

    框架设计:如何基于 Egg 设计 Node 的服务框架

    小分享

    10-27

    1077

    Node 的工具化价值自不多言,而服务化价值需要长期探索,小菜前端在服务化路上依然是小学生,目前的尝试是是 Cross 框架,尝到了一些甜头。

    我想,几乎没有前端工程师会对 Node 不感兴趣,但用它适合干哪些事情,每个人的答案都不同了,比如小菜前端,我们对于 Node 的深度尝试,可以在这里找到答案:《技术栈:为什么 Node 是前端团队的核心技术栈》[1],但关于让 Node 做服务端的...

    Egg入门学习(一)

    weixin_30520015的博客

    01-03

    411

    一:什么是Egg? 它能做什么?Egg.js是nodejs的一个框架,它是基于koa框架的基础之上的上层框架,它继承了koa的,它可以帮助开发人员提高开发效率和维护成本。Egg约定了一些规则,在开发中,我们可以按照一套统一的约定进行应用开发,团队内部使用这种方式开发可以减少开发人员的学习成本。

    Express也是Node.js的一个框架,express简单且扩展性强,但是express框架缺少了...

    【笔记-node】《Egg.js框架入门与实战》、《用 React+React Hook+Egg 造轮子 全栈开发旅游电商应用》

    aSuncat

    02-25

    2715

    第一章 课程导学

    一、Egg.js框架介绍

    1、Egg.js是基于Node.js和Koa的一个企业级应用开发框架,可以帮助团队降低开发成本和维护成本。

    二、express,koa.js

    上手比较简单,但是没有严格的开发规范

    三、Egg.js特性

    1、提供基于Egg的定制上层框架的能力

    2、高度可扩展的插件机制

    3、内置多进程管理

    4、基于Koa开发性能优异

    5、框架稳定,测试覆盖率高

    6、渐进式开发

    四、涉及技术点

    vant ui框架

    vue-cli3

    moment.js

    Egg.js基础

    mysql基础

    egg.js-基于koa2的node.js入门

    weixin_34240657的博客

    12-12

    187

    一.Egg.JS 简介

    Egg.JS是阿里开发的一套node.JS的框架,主要以下几个特点:

    Egg 的插件机制有很高的可扩展性,一个插件只做一件事,Egg 通过框架聚合这些插件,并根据自己的业务场景定制配置,这样应用的开发成本就变得很低。

    Egg 奉行『约定优于配置』,目录名称规范,团队内部采用这种方式可以减少开发人员的学习成本,

    Node.遵循MVC框架

    Mo...

    JS 流行框架(四):EggJS

    0lonely0

    12-07

    1680

    JS 流行框架(四):EggJS

    Egg 视图 (view)、控制器(controller) 和 数据模型 Model(Service) 和配置文件 (config)和拓展(extend)

    ADLF

    07-08

    1187

    MVC 框架:

    模型层(服务层)

    控制器层: 可以直接调用,egg已经帮我们绑定

    配置文件:

    调用:

    拓展方法: context.js

    调用:

    拓展方法: helper.js

    调用:

    模板引擎调用

    控制器调用

    ...

    eggjs中,自动从数据库直接生成model

    久而久之

    02-11

    2942

    eggjs中,自动从数据库直接生成model.

    使用sequelize-auto可以自动生成models

    https://www.npmjs.com/package/sequelize-auto

    直接上命令就可以搞定了

    # 安装必要的库

    npm install -g sequelize-auto

    # MySQL/MariaDB 数据库安装对应的库,其他数据库请看文档

    npm install -g ...

    Egg中根据model自动生成migration文件

    qq_39649991的博客

    09-15

    646

    背景

    在使用egg-sequelize试,model的声明以及migrations的编写会有一定的repeat (egg的issue中也有这个议题)

    说明

    适用于开发中的数据库初始化,数据库版本迭代请遵循数据库迁移的设计初衷

    兼顾了字段、索引

    代码就在下面,可以自行修改

    原理

    在migrations中通过egg-mock获取到model的属性

    在测试文件中获取到model的表名、属性,用fs写入文件到migrations文件夹

    方法一

    可以将migrations按下面demo修改,但是这么写不方

    egg-one:基于egg和one的API实现

    04-28

    egg-one基于eggjs和one的API实现,仅用于学习交流,主要是为了学习应用eggjs提供api以及eggjs的目录结构实践,对比直接请求one来说,会更加简练一些;音乐列表 请求音乐列表首页,每页返回10条数据 ...

    23种设计模式之Java实现

    12-10

    用Java实现的23种设计模式,完整的代码,非常感谢作者,经过近一个星期的持续写作,Java的23种设计模式终于整理完了,这是他自己首次完整的整理一遍设计模式,感受颇多,同时 写下了完整的代码,决定和大家一起分享...

    egg的mvc模式demo

    06-23

    github 上egg mvc的模式确实少,博主用eggjs写了个mvc模式demo,供新手朋友学习交流,可以到博主博文查看演示视频https://blog.csdn.net/xuelang532777032/article/details/125428673

    egg服务器架构文档.docx

    04-09

    入门学习eg框架的笔记,webpack打包,包含egg框架的基本搭建,使用步骤和需要安装的插件,使用node.js,淘宝npm需要自己百度安装,个人觉得egg是最简单的后端框架,内容包含跨域处理和数据库端口处理,还有cookie和...

    tiny-egg:Egg.js的最低实现版本

    05-08

    最低实现版本。 跑步 # clone project git clone git@github.com:caiyongmin/tiny-egg.git # install dependencies npm run bootstrap # run demo npm run demo 浏览页面地址: 。 有关更多页面,请参阅example / ...

    lerna开发流程(入坑和出坑)

    热门推荐

    前端361

    06-14

    1万+

    1, lerna publish发布失败后怎样操作,如下:采用 from-package

    Positionals

    bumpfrom-git

    In addition to the semver keywords supported bylerna version,lerna publishalso supports thefrom-gitkeyword. This will ide...

    BRD,PRD,MRD分别代表什么及它们在互联网领域的地位

    前端361

    08-01

    6423

    互联网领域有很多的专业名词,开发中用到的有PD,TL等,网页监控用到的有pv,uv等。而在用互联网解决商业领域的一些问题时,就会涉及到BRD,PRD,MRD.

    BRD和MRD,PRD一起被认为是从市场到产品需要建立的文档规范。

    BRD

    BRD是产品生命周期中最早的文档,再早就应该是脑中的构思了,其内容涉及市场分析,销售策略,盈利预测等,通常是供决策层们讨论的演示文档,一般比较短小精炼,没有产...

    commander库的作用和简单总结

    前端361

    01-17

    4947

    随着网站工程的复杂化,我们不希望把有限的时间浪费到一些诸如文件复制,打包配置等重复的工作上,我们希望在创建新的项目工程时可以使用模板直接初始化项目,这对于效率和团队使用是比较方便的。对于前端工程化而言,模板的封装许多是基于cli,这时候就要用到commander库,进而简化cli。

    commander简单总结:

    //添加命令:

    myCommand

    .command('init')

    //命令添...

    react最新fiber架构原理和流程

    前端361

    06-19

    3140

    react16以后做了很大的改变,对diff算法进行了重写,从总体看,主要是把一次计算,改变为多次计算,在浏览器有高级任务时,暂停计算。

    原理:从Stack Reconciler到Fiber Reconciler,源码层面其实就是干了一件递归改循环的事情

    fiber设计目的:解决由于大量计算导致浏览器掉帧现象。

    由于js是单线程的,解决主线程被长时间计算占用的问题,就是将计算分为多个步骤,分...

    egg-mp 实现微信支付

    最新发布

    07-25

    要使用 Egg.js 框架实现微信支付,你需要进行以下步骤:

    1. 首先,确保你已经在微信开放平台上注册了一个应用,并获得了相应的 AppID 和 AppSecret。

    2. 在你的 Egg.js 项目中,安装 `egg-wechat-api` 和 `wechat-pay` 这两个依赖包。你可以通过以下命令安装它们:

    ```shell

    npm install egg-wechat-api wechat-pay --save

    ```

    3. 在 Egg.js 的配置文件 `config/config.default.js` 中,添加以下配置项:

    ```javascript

    // 配置 egg-wechat-api 插件

    config.wechatApi = {

    appid: 'your_appid',

    appsecret: 'your_appsecret',

    token: 'your_token',

    encodingAESKey: 'your_encoding_AES_key',

    };

    // 配置 wechat-pay 插件

    config.wechatPay = {

    appid: 'your_appid',

    mch_id: 'your_mch_id',

    partner_key: 'your_partner_key',

    notify_url: 'your_notify_url',

    pfx: require('fs').readFileSync('/path/to/your_cert.p12'),

    };

    ```

    替换上述配置项中的 `your_appid`、`your_appsecret`、`your_token`、`your_encoding_AES_key`、`your_mch_id`、`your_partner_key`、`your_notify_url` 和 `/path/to/your_cert.p12` 分别为你在微信开放平台和商户平台上的实际配置。

    4. 在你的 Egg.js 控制器中,可以使用 `app.wechatApi` 和 `app.wechatPay` 来调用微信 API 和支付 API。你可以根据微信支付的具体接口文档,编写相应的支付逻辑。

    以上是使用 Egg.js 实现微信支付的基本步骤,你还可以根据自己的需求进行更多的定制和扩展。注意,这里只提供了一个简单的示例,实际使用中还需要考虑安全性和错误处理等方面的问题。

    “相关推荐”对你有帮助么?

    非常没帮助

    没帮助

    一般

    有帮助

    非常有帮助

    提交

    qdmoment

    CSDN认证博客专家

    CSDN认证企业博客

    码龄7年

    暂无认证

    196

    原创

    3万+

    周排名

    21万+

    总排名

    47万+

    访问

    等级

    6221

    积分

    77

    粉丝

    127

    获赞

    21

    评论

    665

    收藏

    私信

    关注

    热门文章

    http协议和Tcp协议的区别,http协议详解

    26805

    lerna开发流程(入坑和出坑)

    17813

    es6中class类静态方法,静态属性理解,实例属性,实例方法理解

    16282

    关于css全局作用域(:global)和局部作用域(:local)

    14953

    node安装node-pre-gyp和node-sass报错的原因以及解决办法

    13258

    分类专栏

    数据结构和算法

    11篇

    express

    4篇

    react

    23篇

    node

    26篇

    es6

    24篇

    vue

    9篇

    redux

    8篇

    js

    62篇

    css

    7篇

    webpack

    12篇

    HTML5

    7篇

    DOM对象

    1篇

    系统

    8篇

    gulp

    2篇

    typescript

    2篇

    正则

    2篇

    架构

    16篇

    git

    1篇

    格局

    2篇

    http/https

    2篇

    koa

    2篇

    linux

    3篇

    数据结构

    5篇

    egg

    5篇

    杂谈

    服务器

    4篇

    es10

    1篇

    知识库

    1篇

    http协议

    3篇

    数据库

    2篇

    js设计模式

    5篇

    环境

    1篇

    单元测试

    2篇

    性能优化

    3篇

    后端java

    1篇

    最新评论

    在vue文件中使用render函数封装实现动态组件

    前端-卡布达:

    你好请问一下render方法返回的是jsx呀 vue能直接识别嘛?

    智慧PG(pgting),一款拖拽式智能页面搭建系统

    CSDN-Ada助手:

    一定要坚持创作更多高质量博客哦, 小小红包, 以资鼓励,

    更多创作活动请看:

    程序员有哪些绝对不能踩的坑?: https://activity.csdn.net/creatActivity?id=10433?utm_source=csdn_ai_ada_redpacket

    新人首创任务挑战赛: https://marketing.csdn.net/p/90a06697f3eae83aabea1e150f5be8a5?utm_source=csdn_ai_ada_redpacket

    无效数据,你会怎么处理?: https://activity.csdn.net/creatActivity?id=10423?utm_source=csdn_ai_ada_redpacket

    全部创作活动: https://mp.csdn.net/mp_blog/manage/creative?utm_source=csdn_ai_ada_redpacket

    promise实现原理解析(设计思想)

    清醒不困:

    这两个函数现在mypromise函数内部写好,然后cb 调用时,直接调用函数内部的resolve或reject

    http协议和Tcp协议的区别,http协议详解

    柚子柚子l:

    作者您好,我想请问一下,问别人要资料的时候他要收网络传输费用符合TCP协议的相关条款吗

    promise实现原理解析(设计思想)

    KK-Greyson:

    resolve和reject 两个参数是从哪传进去的?

    您愿意向朋友推荐“博客详情页”吗?

    强烈不推荐

    不推荐

    一般般

    推荐

    强烈推荐

    提交

    最新文章

    智慧PG集成开发平台pgting-cli发布了

    antd扩展动态表单formake,支持事件配置和复杂嵌套

    智慧PG(pgting),一款拖拽式智能页面搭建系统

    2023年3篇

    2022年1篇

    2020年23篇

    2019年130篇

    2018年39篇

    目录

    目录

    分类专栏

    数据结构和算法

    11篇

    express

    4篇

    react

    23篇

    node

    26篇

    es6

    24篇

    vue

    9篇

    redux

    8篇

    js

    62篇

    css

    7篇

    webpack

    12篇

    HTML5

    7篇

    DOM对象

    1篇

    系统

    8篇

    gulp

    2篇

    typescript

    2篇

    正则

    2篇

    架构

    16篇

    git

    1篇

    格局

    2篇

    http/https

    2篇

    koa

    2篇

    linux

    3篇

    数据结构

    5篇

    egg

    5篇

    杂谈

    服务器

    4篇

    es10

    1篇

    知识库

    1篇

    http协议

    3篇

    数据库

    2篇

    js设计模式

    5篇

    环境

    1篇

    单元测试

    2篇

    性能优化

    3篇

    后端java

    1篇

    目录

    评论

    被折叠的  条评论

    为什么被折叠?

    到【灌水乐园】发言

    查看更多评论

    添加红包

    祝福语

    请填写红包祝福语或标题

    红包数量

    红包个数最小为10个

    红包总金额

    红包金额最低5元

    余额支付

    当前余额3.43元

    前往充值 >

    需支付:10.00元

    取消

    确定

    下一步

    知道了

    成就一亿技术人!

    领取后你会自动成为博主和红包主的粉丝

    规则

    hope_wisdom 发出的红包

    实付元

    使用余额支付

    点击重新获取

    扫码支付

    钱包余额

    0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值

    EGG中文(繁體)翻譯:劍橋詞典

    EGG中文(繁體)翻譯:劍橋詞典

    詞典

    翻譯

    文法

    同義詞詞典

    +Plus

    劍橋詞典+Plus

    Shop

    劍橋詞典+Plus

    我的主頁

    +Plus 幫助

    退出

    劍橋詞典+Plus

    我的主頁

    +Plus 幫助

    退出

    登錄

    /

    註冊

    正體中文 (繁體)

    查找

    查找

    英語-中文(繁體)

    egg 在英語-中文(繁體)詞典中的翻譯

    eggnoun uk

    Your browser doesn't support HTML5 audio

    /eɡ/ us

    Your browser doesn't support HTML5 audio

    /eɡ/

    egg noun

    (FOOD)

    Add to word list

    Add to word list

    A1 [ C or U ] the oval object with a hard shell that is produced by female birds, especially chickens, eaten as food

    (食用的)蛋(尤指雞蛋)

    a hard-boiled/soft-boiled egg

    煮得老的/嫩的雞蛋

    How do you like your eggs - fried or boiled?

    雞蛋你想怎樣吃?是吃煎的還是煮的?

    [ C ] an object that is made in the shape of a bird's egg

    蛋狀物

    a chocolate/marble egg

    巧克力蛋/大理石球

    更多範例减少例句Mix the butter with the sugar and then add the egg.Crack three eggs into a bowl and mix them together.Could you get me half a dozen eggs when you go to the shop?We had bacon and eggs for breakfast.I like eggs lightly cooked so that the yolk is still runny.

    egg noun

    (REPRODUCTION)

    B2 [ C ] an oval object, often with a hard shell, that is produced by female birds and particular reptiles and insects, and contains a baby animal that comes out when it is developed

    (鳥類的)卵,蛋

    The cuckoo lays her egg in another bird's nest.

    杜鵑將卵産在其他鳥的巢裡。

    After fourteen days the eggs hatch.

    14天後,卵孵化了。

    [ C ] a cell produced by a woman or female animal from which a baby can develop if it combines with a male sex cell

    卵,卵子;卵細胞

    Identical twins develop from a single fertilized egg that then splits into two.

    同卵雙胞胎是由一個受精卵分裂發育而來的。

    更多範例减少例句Once an egg is fertilized by the sperm, it becomes an embryo.An attempt to implant an embryo using an egg from an anonymous woman donor was unsuccessful.Genes determine how we develop from the moment the sperm fuses with the egg.A blackbird's egg is blue with brown speckles on it.In human reproduction, one female egg is usually fertilized by one sperm.

    習語

    have egg on your face

    put all your eggs in one basket

    (egg在劍橋英語-中文(繁體)詞典的翻譯 © Cambridge University Press)

    A1,B2

    egg的翻譯

    中文(簡體)

    食物, (食用的)蛋(尤指鸡蛋), 蛋状物…

    查看更多內容

    西班牙語

    huevo, óvulo, huevo [masculine]…

    查看更多內容

    葡萄牙語

    ovo, ovo [masculine], óvulo [masculine]…

    查看更多內容

    更多語言

    in Marathi

    日語

    土耳其語

    法語

    加泰羅尼亞語

    in Dutch

    in Tamil

    in Hindi

    in Gujarati

    丹麥語

    in Swedish

    馬來西亞語

    德語

    挪威語

    in Urdu

    in Ukrainian

    俄語

    in Telugu

    阿拉伯語

    in Bengali

    捷克語

    印尼語

    泰語

    越南語

    波蘭語

    韓語

    意大利語

    अंडी, अंडाकृती, अंडे…

    查看更多內容

    (ニワトリの)卵, 卵, 卵(たまご)…

    查看更多內容

    yumurta, (kuş, böcek vb.yavrusu taşıyan) yumurta…

    查看更多內容

    œuf [masculine], ovule [masculine], oeuf…

    查看更多內容

    ou…

    查看更多內容

    ei, eicel…

    查看更多內容

    பெண் பறவைகள், குறிப்பாக கோழிகள், மற்றும் உணவாக உண்ணப்படும் ஒரு கடினமான ஓட்டைக் கொண்ட ஓவல் (நீள்வட்ட) விடிவாலான பொருள்…

    查看更多內容

    अंडा, पक्षी के अंडे के आकार में बनी वस्तु, (किसी महिला या मादा पशु द्वारा निर्मित कोशिका) अंडा…

    查看更多內容

    ઈંડું, ઈંડાકારમાં, ઈંડા…

    查看更多內容

    æg, ægcelle…

    查看更多內容

    ägg…

    查看更多內容

    telur…

    查看更多內容

    das Ei, die Eizelle…

    查看更多內容

    egg [neuter], eggcelle [masculine], egg…

    查看更多內容

    انڈہ, بیضہ, بیضہ نما…

    查看更多內容

    яйце, яйцеклітина…

    查看更多內容

    яйцо, яйцеклетка…

    查看更多內容

    గుడ్డు, పక్షి గుడ్డు ఆకారంలో చేసిన వస్తువు, అండం…

    查看更多內容

    بَيْضة…

    查看更多內容

    ডিম, মুর্গীর ডিম, পাখির ডিমের আকারে তৈরি কোনো বস্তু…

    查看更多內容

    vejce, vajíčko…

    查看更多內容

    telur, sel telur…

    查看更多內容

    ไข่, ไข่ไก่, ไข่ของสัตว์เลี้ยงลูกด้วยนมตัวเมีย…

    查看更多內容

    quả trứng, trứng…

    查看更多內容

    jajko, jajo, jajeczko…

    查看更多內容

    달걀, 알…

    查看更多內容

    uovo, cellula uovo*…

    查看更多內容

    需要一個翻譯器嗎?

    獲得快速、免費的翻譯!

    翻譯器工具

    egg的發音是什麼?

    在英語詞典中查看 egg 的釋義

    瀏覽

    EFL

    egalitarian

    egalitarianism

    egestion

    egg

    egg cream

    egg cup

    egg flip

    egg roll

    egg更多的中文(繁體)翻譯

    全部

    egg cup

    egg flip

    egg roll

    egg yolk

    nest egg

    over-egg

    egg cream

    查看全部意思»

    片語動詞

    egg someone on

    查看全部動詞片語意思»

    慣用語

    curate's egg idiom

    can't boil an egg idiom

    over-egg the pudding idiom

    have egg on your face idiom

    a chicken and egg situation idiom

    kill the goose that lays the golden egg idiom

    查看全部慣用語意思»

    「每日一詞」

    veggie burger

    UK

    Your browser doesn't support HTML5 audio

    /ˈvedʒ.i ˌbɜː.ɡər/

    US

    Your browser doesn't support HTML5 audio

    /ˈvedʒ.i ˌbɝː.ɡɚ/

    a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape

    關於這個

    部落格

    Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)

    March 06, 2024

    查看更多

    新詞

    stochastic parrot

    March 04, 2024

    查看更多

    已添加至 list

    回到頁面頂端

    內容

    英語-中文(繁體)翻譯

    ©劍橋大學出版社與評估2024

    學習

    學習

    學習

    新詞

    幫助

    紙本出版

    Word of the Year 2021

    Word of the Year 2022

    Word of the Year 2023

    開發

    開發

    開發

    詞典API

    連按兩下查看

    搜尋Widgets

    執照資料

    關於

    關於

    關於

    無障礙閱讀

    劍橋英語教學

    劍橋大學出版社與評估

    授權管理

    Cookies與隱私保護

    語料庫

    使用條款

    京ICP备14002226号-2

    ©劍橋大學出版社與評估2024

    劍橋詞典+Plus

    我的主頁

    +Plus 幫助

    退出

    詞典

    定義

    清晰解釋自然的書面和口頭英語

    英語

    學習詞典

    基礎英式英語

    基礎美式英語

    翻譯

    點選箭頭改變翻譯方向。

    雙語詞典

    英語-中文(簡體)

    Chinese (Simplified)–English

    英語-中文(繁體)

    Chinese (Traditional)–English

    英語-荷蘭文

    荷蘭語-英語

    英語-法語

    法語-英語

    英語-德語

    德語-英語

    英語-印尼語

    印尼語-英語

    英語-義大利語

    義大利語-英語

    英語-日語

    日語-英語

    英語-挪威語

    挪威語-英語

    英語-波蘭語

    波蘭語-英語

    英語-葡萄牙語

    葡萄牙語-英語

    英語-西班牙語

    西班牙語-英語

    English–Swedish

    Swedish–English

    半雙語詞典

    英語-阿拉伯語

    英語-孟加拉文

    英語-加泰羅尼亞語

    英語-捷克語

    英語-丹麥語

    English–Gujarati

    英語-印地語

    英語-韓語

    英語-馬來語

    英語-馬拉地語

    英語-俄語

    English–Tamil

    English–Telugu

    英語-泰語

    英語-土耳其語

    英語-烏克蘭文

    English–Urdu

    英語-越南語

    翻譯

    文法

    同義詞詞典

    Pronunciation

    劍橋詞典+Plus

    Shop

    劍橋詞典+Plus

    我的主頁

    +Plus 幫助

    退出

    登錄 /

    註冊

    正體中文 (繁體)  

    Change

    English (UK)

    English (US)

    Español

    Русский

    Português

    Deutsch

    Français

    Italiano

    中文 (简体)

    正體中文 (繁體)

    Polski

    한국어

    Türkçe

    日本語

    Tiếng Việt

    हिंदी

    தமிழ்

    తెలుగు

    關注我們!

    選擇一本詞典

    最近的詞和建議

    定義

    清晰解釋自然的書面和口頭英語

    英語

    學習詞典

    基礎英式英語

    基礎美式英語

    文法與同義詞詞典

    對自然書面和口頭英語用法的解釋

    英語文法

    同義詞詞典

    Pronunciation

    British and American pronunciations with audio

    English Pronunciation

    翻譯

    點選箭頭改變翻譯方向。

    雙語詞典

    英語-中文(簡體)

    Chinese (Simplified)–English

    英語-中文(繁體)

    Chinese (Traditional)–English

    英語-荷蘭文

    荷蘭語-英語

    英語-法語

    法語-英語

    英語-德語

    德語-英語

    英語-印尼語

    印尼語-英語

    英語-義大利語

    義大利語-英語

    英語-日語

    日語-英語

    英語-挪威語

    挪威語-英語

    英語-波蘭語

    波蘭語-英語

    英語-葡萄牙語

    葡萄牙語-英語

    英語-西班牙語

    西班牙語-英語

    English–Swedish

    Swedish–English

    半雙語詞典

    英語-阿拉伯語

    英語-孟加拉文

    英語-加泰羅尼亞語

    英語-捷克語

    英語-丹麥語

    English–Gujarati

    英語-印地語

    英語-韓語

    英語-馬來語

    英語-馬拉地語

    英語-俄語

    English–Tamil

    English–Telugu

    英語-泰語

    英語-土耳其語

    英語-烏克蘭文

    English–Urdu

    英語-越南語

    詞典+Plus

    詞彙表

    選擇語言

    正體中文 (繁體)  

    English (UK)

    English (US)

    Español

    Русский

    Português

    Deutsch

    Français

    Italiano

    中文 (简体)

    Polski

    한국어

    Türkçe

    日本語

    Tiếng Việt

    हिंदी

    தமிழ்

    తెలుగు

    內容

    英語-中文(繁體) 

     

    Noun 

    egg (FOOD)

    egg (REPRODUCTION)

    Translations

    文法

    所有翻譯

    我的詞彙表

    把egg添加到下面的一個詞彙表中,或者創建一個新詞彙表。

    更多詞彙表

    前往詞彙表

    對該例句有想法嗎?

    例句中的單詞與輸入詞條不匹配。

    該例句含有令人反感的內容。

    取消

    提交

    例句中的單詞與輸入詞條不匹配。

    該例句含有令人反感的內容。

    取消

    提交

    Egg | Definition, Characteristics, & Nutritional Content | Britannica

    Egg | Definition, Characteristics, & Nutritional Content | Britannica

    Search Britannica

    Click here to search

    Search Britannica

    Click here to search

    Login

    Subscribe

    Subscribe

    Home

    Games & Quizzes

    History & Society

    Science & Tech

    Biographies

    Animals & Nature

    Geography & Travel

    Arts & Culture

    Money

    Videos

    On This Day

    One Good Fact

    Dictionary

    New Articles

    History & Society

    Lifestyles & Social Issues

    Philosophy & Religion

    Politics, Law & Government

    World History

    Science & Tech

    Health & Medicine

    Science

    Technology

    Biographies

    Browse Biographies

    Animals & Nature

    Birds, Reptiles & Other Vertebrates

    Bugs, Mollusks & Other Invertebrates

    Environment

    Fossils & Geologic Time

    Mammals

    Plants

    Geography & Travel

    Geography & Travel

    Arts & Culture

    Entertainment & Pop Culture

    Literature

    Sports & Recreation

    Visual Arts

    Companions

    Demystified

    Image Galleries

    Infographics

    Lists

    Podcasts

    Spotlights

    Summaries

    The Forum

    Top Questions

    #WTFact

    100 Women

    Britannica Kids

    Saving Earth

    Space Next 50

    Student Center

    Home

    Games & Quizzes

    History & Society

    Science & Tech

    Biographies

    Animals & Nature

    Geography & Travel

    Arts & Culture

    Money

    Videos

    egg

    Table of Contents

    egg

    Table of Contents

    IntroductionCharacteristics of the eggStructure and compositionMicrobiologyFresh eggsEgg productsLiquid egg productsDried egg productsFrozen egg productsSpecialty egg products

    References & Edit History

    Related Topics

    Images & Videos

    Quizzes

    Ultimate Foodie Quiz

    A World of Food Quiz

    Baking and Baked Goods Quiz

    What’s on the Menu? Vocabulary Quiz

    Read Next

    What Do Eggs Have to Do with Easter?

    10 Incredible Uses for Eggs

    Discover

    9 of the World’s Deadliest Snakes

    What Did Cleopatra Look Like?

    Was Napoleon Short?

    America’s 5 Most Notorious Cold Cases (Including One You May Have Thought Was Already Solved)

    12 Greek Gods and Goddesses

    Did Marie-Antoinette Really Say “Let Them Eat Cake”?

    How Did Helen Keller Fly a Plane?

    Home

    Entertainment & Pop Culture

    Food

    Arts & Culture

    egg

    food

    Actions

    Cite

    verifiedCite

    While every effort has been made to follow citation style rules, there may be some discrepancies.

    Please refer to the appropriate style manual or other sources if you have any questions.

    Select Citation Style

    MLA

    APA

    Chicago Manual of Style

    Copy Citation

    Share

    Share

    Share to social media

    Facebook

    Twitter

    URL

    https://www.britannica.com/topic/egg-food

    Give Feedback

    External Websites

    Feedback

    Corrections? Updates? Omissions? Let us know if you have suggestions to improve this article (requires login).

    Feedback Type

    Select a type (Required)

    Factual Correction

    Spelling/Grammar Correction

    Link Correction

    Additional Information

    Other

    Your Feedback

    Submit Feedback

    Thank you for your feedback

    Our editors will review what you’ve submitted and determine whether to revise the article.

    External Websites

    Harvard - T.H. Chan School of Public Health - Eggs

    Food Timeline - Eggs

    Verywell Fit - Egg Nutrition Facts and Health Benefits

    Healthline - 6 Reasons Why Eggs Are the Healthiest Food on the Planet

    National Center for Biotechnology Information - PubMed Central - Egg and Egg-Derived Foods: Effects on Human Health and Use as Functional Foods

    Chemistry LibreTexts - Eggs

    Print

    print

    Print

    Please select which sections you would like to print:

    Table Of Contents

    Cite

    verifiedCite

    While every effort has been made to follow citation style rules, there may be some discrepancies.

    Please refer to the appropriate style manual or other sources if you have any questions.

    Select Citation Style

    MLA

    APA

    Chicago Manual of Style

    Copy Citation

    Share

    Share

    Share to social media

    Facebook

    Twitter

    URL

    https://www.britannica.com/topic/egg-food

    Feedback

    External Websites

    Feedback

    Corrections? Updates? Omissions? Let us know if you have suggestions to improve this article (requires login).

    Feedback Type

    Select a type (Required)

    Factual Correction

    Spelling/Grammar Correction

    Link Correction

    Additional Information

    Other

    Your Feedback

    Submit Feedback

    Thank you for your feedback

    Our editors will review what you’ve submitted and determine whether to revise the article.

    External Websites

    Harvard - T.H. Chan School of Public Health - Eggs

    Food Timeline - Eggs

    Verywell Fit - Egg Nutrition Facts and Health Benefits

    Healthline - 6 Reasons Why Eggs Are the Healthiest Food on the Planet

    National Center for Biotechnology Information - PubMed Central - Egg and Egg-Derived Foods: Effects on Human Health and Use as Functional Foods

    Chemistry LibreTexts - Eggs

    Written by

    Glenn W. Froning

    Professor of Food Science and Technology, University of Nebraska, Lincoln. Author of Effect of Season and Age of Layer on Egg Quality.

    Glenn W. Froning,

    R. Paul Singh

    Professor of Food Engineering, University of California, Davis. Coauthor of Introduction to Food Engineering.

    R. Paul SinghSee All

    Fact-checked by

    The Editors of Encyclopaedia Britannica

    Encyclopaedia Britannica's editors oversee subject areas in which they have extensive knowledge, whether from years of experience gained by working on that content or via study for an advanced degree. They write new content and verify and edit content received from contributors.

    The Editors of Encyclopaedia Britannica

    Last Updated:

    Feb 16, 2024

    Article History

    Table of Contents

    brown eggs

    See all media

    Category:

    Arts & Culture

    Related Topics:

    shakshouka

    century egg

    dried egg

    egg white

    liquid egg

    (Show more)

    On the Web:

    Healthline - 6 Reasons Why Eggs Are the Healthiest Food on the Planet (Feb. 16, 2024)

    (Show more)

    See all related content →

    Recent News

    Feb. 13, 2024, 3:45 AM ET (Yahoo News)

    Scientists discover ancient egg dating back 1,700 years still has liquid inside

    egg, the content of the hard-shelled reproductive body produced by a bird, considered as food.While the primary role of the egg obviously is to reproduce the species, most eggs laid by domestic fowl, except those specifically set aside for hatching, are not fertilized but are sold mainly for human consumption. Eggs produced in quantity come from chickens, ducks, geese, turkeys, guinea fowl, pigeons, pheasants, and quail. This article describes the processing of chicken eggs, which represent the bulk of egg production in the United States and Europe. Duck eggs are consumed as food in parts of Europe and Asia, and goose eggs are also a food in many European countries. Commercial production of turkey and pigeon eggs is almost entirely confined to those used for producing turkey poults and young pigeons (squabs). Pheasant and quail eggs provide birds for hobby or sport use. Characteristics of the egg Structure and composition structural components of an eggThe structural components of an egg.(more)Why do chicken eggs come in different colors?An explanation of why eggs are different colours.(more)See all videos for this articleThe structural components of the egg include the shell and shell membranes (10 percent); the albumen or white (60 percent), including the thick albumen, the outer thin albumen, the inner thin albumen, and the chalazae; and the yolk (30 percent). In a fertilized egg, the yolk supplies the nutrients and the albumen supplies the water necessary for the development of the embryo. In addition, the layers of albumen act as a cushion to protect the embryo from jarring movements, while the chalazae help to maintain the orientation of the embryo within the egg. The nutrient composition of chicken eggs is presented in the table.

    Britannica Quiz

    Ultimate Foodie Quiz

    Nutrient composition of fresh chicken egg (per 100 g)*

    energy (kcal)

    water (g)

    protein (g)

    fat (g)

    cholesterol (mg)

    carbohydrate (g)

    vitamin A (IU)

    riboflavin (mg)

    calcium (mg)

    phosphorus (mg)

    *100 g is approximately equal to two large whole eggs.

    Source: U.S. Department of Agriculture, Composition of Foods, Agriculture Handbook no. 8-1.

    whole egg

    149

    75.33

    12.49

    10.02

    425

    1.22

    635

    0.508

    49

    178

    yolk

    358

    48.81

    16.76

    30.87

    1,281

    1.78

    1,945

    0.639

    137

    488

    white

    50

    87.81

    10.52

    0

    1.03

    0.452

    6

    13

    The whole egg is a source of high-quality protein (i.e., proteins that contain all the amino acids needed in the human diet). In addition, it is an excellent source of all vitamins (except vitamin C) and contains many essential minerals, including phosphorus and zinc. All the fats, or lipids, as well as the cholesterol are found in the yolk. Yolk lipids are high in unsaturated fatty acids, with the ratio of unsaturated to saturated fatty acids commonly being 2 to 1. By influencing the diet of the hen, some processors are able to market shell eggs with a higher ratio of unsaturated to saturated fatty acids. Particular emphasis is being given to increasing the highly unsaturated long-chain omega-3 fatty acids by adding fish oil to the hen feed. Omega-3 fatty acids have been shown to play a role both in normal growth and development and in the prevention of many diseases.

    Get a Britannica Premium subscription and gain access to exclusive content.

    Subscribe Now

    The cholesterol content of a whole large egg is approximately 216 milligrams—a substantially lower figure than that reported before the late 1980s, when improved analytical techniques were instituted. Moreover, the egg industry has probably made some progress in lowering cholesterol content through genetic selection and improved diets. Microbiology More than 90 percent of all eggs are free of contamination at the time they are laid; contamination with Salmonella bacteria and with certain spoilage organisms occurs essentially afterward. Proper washing and sanitizing of eggs eliminates most Salmonella and spoilage organisms deposited on the shell. The organism Salmonella enteritidis, a common cause of gastroenteritis (a form of food poisoning), has been found to be transferred through the hen ovary in fewer than 1 percent of all eggs produced. Ovarian-transferred S. enteritidis can be controlled by thorough cooking of eggs (i.e., until there are no runny whites or yolk). Certain spoilage organisms (e.g., Alcaligenes, Proteus, Pseudomonas, and some molds) may produce green, pink, black, colourless, and other rots in eggs after long periods of storage. However, since eggs move through market channels rapidly, the modern consumer seldom encounters spoiled eggs. Fresh eggs eggs prepared for candlingEggs rolling down a conveyor belt in preparation for flash candling.(more)egg candlingEggs being flash candled to detect cracks, blood spots, and other defects.(more)Fresh eggs are gathered on automatic collection belts at the farm and stored in a cooler at about 7 °C (45 °F). The eggs are then delivered to a central processing plant, where they are washed, sanitized, and graded. Grading involves the sorting of eggs into size and quality categories using automated machines. Flash candling (passing the eggs over a strong light source) detects any abnormalities such as cracked eggs and eggs containing blood spots or other defects. Higher-grade eggs have a thick, upstanding white, an oval yolk, and a clean, smooth, unbroken shell. egg sortingEggs being sorted by size and quality.(more)In the United States eggs are sized on the basis of a minimum weight per dozen in ounces. One dozen extra large eggs weigh 27 ounces (765 grams); large eggs, 24 ounces; medium eggs, 21 ounces. Weight standards in other countries vary, but most are measured in metric units. For example, eggs might be sold in cartons of 10 eggs each.

    Most eggs sold in modern supermarkets are approximately four to five days old. If kept refrigerated by the consumer, they will maintain good quality and flavour for about four weeks.

    egg是什么意思_egg的翻译_音标_读音_用法_例句_爱词霸在线词典

    什么意思_egg的翻译_音标_读音_用法_例句_爱词霸在线词典首页翻译背单词写作校对词霸下载用户反馈专栏平台登录egg是什么意思_egg用英语怎么说_egg的翻译_egg翻译成_egg的中文意思_egg怎么读,egg的读音,egg的用法,egg的例句翻译人工翻译试试人工翻译翻译全文简明柯林斯牛津egg高中/CET4/CET6英 [eɡ]美 [eɡ]释义n.蛋,卵; 禽蛋; 蛋形物; 卵细胞大小写变形:EggEGG点击 人工翻译,了解更多 人工释义词态变化复数: eggs;实用场景例句全部鸡蛋家伙煽动怂恿an egg donor卵子提供者牛津词典They were left with egg on their faces when only ten people showed up.只有十人到场,他们感到很丢面子。牛津词典He hit the other boy again and again as his friends egged him on.他在朋友的煽动下一次又一次地打了另一个男孩。牛津词典You've got some egg on your shirt.你的衬衣上沾了些蛋。牛津词典egg yolks/whites蛋黄 / 白牛津词典egg noodles鸡蛋面牛津词典ducks'/quails' eggs鸭 / 鹌鹑蛋牛津词典a chocolate egg (= made from chocolate in the shape of an egg)巧克力蛋牛津词典The male sperm fertilizes the female egg.雄性的精子使雌性的卵子受精。牛津词典a boiled egg煮蛋牛津词典bacon and eggs熏肉加煎蛋牛津词典fried/poached/scrambled eggs煎 / 荷包 / 炒蛋牛津词典Bind the mixture together with a little beaten egg.用少许打过的蛋将混合料搅拌在一起。牛津词典The female sits on the eggs until they hatch.雌鸟伏在蛋上直到其孵化。牛津词典The fish lay thousands of eggs at one time.这种鱼一次产卵数千个。牛津词典crocodile eggs鳄鱼蛋牛津词典It only takes one sperm to fertilize an egg.只需要一个精子就能让卵子受精。柯林斯高阶英语词典The key word here is diversify; don't put all your eggs in one basket.这里的关键词是多样性;不要在一棵树上吊死。柯林斯高阶英语词典If they take this game lightly they could end up with egg on their faces.如果他们对这场比赛掉以轻心,结果很可能会出丑。柯林斯高阶英语词典...a baby bird hatching from its egg.从蛋中孵出的小鸟柯林斯高阶英语词典...ant eggs.蚁卵柯林斯高阶英语词典Break the eggs into a shallow bowl and beat them lightly.把鸡蛋打到一个浅碗中,轻轻搅打。柯林斯高阶英语词典...bacon and eggs.咸肉煎蛋柯林斯高阶英语词典...a chocolate egg.巧克力蛋柯林斯高阶英语词典The judge sentenced the bad egg to death.法官判这个混蛋死刑.《简明英汉词典》You've got some egg on your chin.你的下巴上沾着一点鸡蛋.《简明英汉词典》收起实用场景例句真题例句全部四级六级高考Traditional Ukrainian decorated eggs also spoke to those fears.出自-2017年6月阅读原文There's an ancient legend that as long as these eggs are made, evil will not prevail in the world, says Joan Brander, a Canadian egg-painter who has been painting eggs for over 60 years, having learned the art from her Ukrainian relatives.出自-2017年6月阅读原文Some traditions are simple, like the red eggs that get baked into Greek Easter breads.出自-2017年6月阅读原文So it's no surprise that cultures around the world celebrate spring by honoring the egg.出自-2017年6月阅读原文She never knows if the egg will break before the design is completed.出自-2017年6月阅读原文Several years ago, she became interested in eggs and learned the traditional Ukrainian technique to draw her very modern characters.出自-2017年6月阅读原文Others elevate the egg into a fancy art, like the heavily jewel-covered eggs that were favored by the Russians starting in the 19th century.出自-2017年6月阅读原文One ancient form of egg art comes to us from Ukraine.出自-2017年6月阅读原文I've broken eggs at every stage of the process—from the very beginning to the very, very end.出自-2017年6月阅读原文For centuries, Ukrainians have been drawing complicated patterns on eggs.出自-2017年6月阅读原文Eggs serve as an enduring symbol of new life.出自-2017年6月阅读原文Eggs reflect the anxieties of people today.出自-2017年6月阅读原文Eggs provide a unique surface to paint on.出自-2017年6月阅读原文Eggs have an oval shape appealing to artists.出自-2017年6月阅读原文Eggs are, too.出自-2017年6月阅读原文Contemporary artists have followed this tradition to create eggs that speak to the anxieties of our age: Life is precious, and delicate.出自-2017年6月阅读原文A decorated egg with a bird on it, given to a young married couple, is a wish for children.出自-2017年6月阅读原文A decorated egg thrown into the field would be a wish for a good harvest.出自-2017年6月阅读原文He also perfected the souffle—a baked egg dish, and introduced the standard chef's uniform—the same double-breasted white coat and tall white hat still worn by many chefs today.2018年12月四级真题(第二套)阅读 Section BOthers elevate the egg into a fancy art, like the heavily jewel-covered "eggs" that were favored by the Russians starting in the 19th century.2017年6月四级真题(第一套)阅读 Section CSo when fly the north, they might lay eggs in Louisiana and die.出自-2014年6月听力原文The eggs of that following generation may be found in Kentucky, the eggs of next generation may be in the Kang Michigan.出自-2014年6月听力原文Each flock of butterflies lays eggs in the same states出自-2014年6月听力原文They start to lay eggs when they are nine months old.出自-2014年6月听力原文Each generation in a cycle lays eggs at a different place出自-2014年6月听力原文Only the strongest can reach their destination to lay eggs.出自-2014年6月听力原文And then they put some bacon in the fat, broke an egg over the top, and put the whole lot in the oven for about ten minutes.2016年12月六级真题(第一套)听力 Section AEach egg gives you 7 grams, the cheese gives you about 6 grams and the orange—about 2 grams.2019年12月六级真题(第二套)阅读 Section BThere was just this egg floating about in gallons of fat and raw bacon.2016年12月六级真题(第一套)听力 Section AYou can also add different things if you like such as half-boiled egg or cured ham.2018年6月六级真题(第二套)听力 Section AAfter several weeks' successful work, I began to notice that egg production was going down.2016年高考英语浙江卷(10月) 完形填空 原文And I don't like eggs, either.2015年高考英语全国卷1 听力 原文And the more frequently mothers had called to their eggs, the more similar were the babies' begging calls.2017年高考英语江苏卷 阅读理解 阅读B 原文Female Australian superb fairy wrens were found to repeat one sound over and over again while hatching their eggs.2017年高考英语江苏卷 阅读理解 阅读B 原文He said the chickens had never missed a meal and he could not figure out why some of them had stopped laying eggs.2016年高考英语浙江卷(10月) 完形填空 原文However,he would have to buy chicken feed with the money he made from the eggs.2016年高考英语浙江卷(10月) 完形填空 原文I told him that they would be his own chickens and we would buy the eggs from him.2016年高考英语浙江卷(10月) 完形填空 原文In China, when a baby is one month old, families name and welcome their child in a celebration that includes giving red-colored eggs to guests.2015年高考英语安徽卷 阅读理解 阅读E 原文The visitor will enter the world of dali through an egg and is met with the beginning, the world of birth.2015年高考英语全国卷1 阅读理解 阅读C 原文When the eggs were hatched, the baby birds made the similar chirp to their mothers—a sound that served as their regular "Feed me!" call.2017年高考英语江苏卷 阅读理解 阅读B 原文收起真题例句英英释义Noun1. animal reproductive body consisting of an ovum or embryo together with nutritive and protective envelopes; especially the thin-shelled reproductive body laid by e.g. female birds2. oval reproductive body of a fowl (especially a hen) used as food3. one of the two male reproductive glands that produce spermatozoa and secrete androgens;"she kicked him in the balls and got away"Verb1. throw eggs at2. coat with beaten egg;"egg a schnitzel"收起英英释义词组搭配don't put all your eggs in one basket(proverb)don't risk everything on the success of one venture(谚)不要孤注一掷,不要把一切希望寄托在一件事上go suck an egg[as imperative](N. Amer. informal)used as an expression of anger or scorn(北美,非正式)见鬼去吧(表示愤怒或鄙视)kill the goose that lays the golden eggsdestroy a reliable and valuable source of income杀鸡取卵自绝财源lay an egg(N. Amer. informal)be completely unsuccessful; fail badly(北美,非正式)完全失败with egg on one's face(informal)appearing foolish or ridiculous(非正式)丢脸,出丑don't underestimate this team, or you'll be left with egg on your face.不要小瞧这支队,不然你会出丑的。put all (one's) eggs in one basket 或 have all (one's) eggs in one basket 【非正式用语】To risk everything on a single venture.孤注一掷:将所有的一切放在一次冒险上egg on (one's) face【非正式用语】Embarrassment; humiliation尴尬;羞辱If you do that, you'll end up with egg on your face.你要是做那件事,必将以耻辱告终收起词组搭配同义词incitestirurgeagitateprovokearouseovumembryo行业词典动物学卵[细胞]   "又称 :卵[细胞](ovum,ootid) "   医学卵:雌配子,同ovum   卵母细胞:同oocyte   雌生殖细胞:指受精前任何时期的和受精后甚至经一定程度发育的雌生殖细胞   昆虫学卵   植物学卵   水产带卵雌体   bearing female 性腺已发育成熟但尚未产卵的雌虾。   卵水   water 水生动物产过卵并使之含有诱导精子反应活性成分的水体。   常用俚语egg小心地,轻轻地搬动或移动He has egged many pieces of antique china to a different room.他已经把许多件古瓷器小心地搬到另一个房间去了。人,家伙,东西,事物Evelyn's a tough egg.伊夫林是条硬汉子。I think it's a very good egg.我觉得这事情挺好。脑袋,炸弹,水雷(等球状物)bop him on the egg 击中他头部怕老婆者,惧内、"妻管严"的男人It's true, he's an egg at home. 千真万确,他在家是个"妻管严"。tough egg to crack难打交道的或难以理解的人或事,难以办到的事I wish Jill wasn't such a tough nut to crack.我希望吉尔不是个那么难打交道的人。This problem is a tough egg to crack. 这一问题可真令人难以理解。Getting them all here on time will be a tough nul to crack.要他们全都准时到将是件很难办到的事。释义词态变化实用场景例句真题例句英英释义词组搭配同义词行业词典常

    Egg | Biology, Anatomy & Function | Britannica

    Egg | Biology, Anatomy & Function | Britannica

    Search Britannica

    Click here to search

    Search Britannica

    Click here to search

    Login

    Subscribe

    Subscribe

    Home

    Games & Quizzes

    History & Society

    Science & Tech

    Biographies

    Animals & Nature

    Geography & Travel

    Arts & Culture

    Money

    Videos

    On This Day

    One Good Fact

    Dictionary

    New Articles

    History & Society

    Lifestyles & Social Issues

    Philosophy & Religion

    Politics, Law & Government

    World History

    Science & Tech

    Health & Medicine

    Science

    Technology

    Biographies

    Browse Biographies

    Animals & Nature

    Birds, Reptiles & Other Vertebrates

    Bugs, Mollusks & Other Invertebrates

    Environment

    Fossils & Geologic Time

    Mammals

    Plants

    Geography & Travel

    Geography & Travel

    Arts & Culture

    Entertainment & Pop Culture

    Literature

    Sports & Recreation

    Visual Arts

    Companions

    Demystified

    Image Galleries

    Infographics

    Lists

    Podcasts

    Spotlights

    Summaries

    The Forum

    Top Questions

    #WTFact

    100 Women

    Britannica Kids

    Saving Earth

    Space Next 50

    Student Center

    Home

    Games & Quizzes

    History & Society

    Science & Tech

    Biographies

    Animals & Nature

    Geography & Travel

    Arts & Culture

    Money

    Videos

    egg

    Table of Contents

    egg

    Table of Contents

    Introduction

    References & Edit History

    Related Topics

    Images & Videos

    Quizzes

    Characteristics of the Human Body

    Facts You Should Know: The Human Body Quiz

    Discover

    Was Napoleon Short?

    8 Animals That Suck (Blood)

    7 Surprising Uses for Mummies

    America’s 5 Most Notorious Cold Cases (Including One You May Have Thought Was Already Solved)

    9 of the World’s Deadliest Snakes

    The 10 Greatest Basketball Players of All Time

    How Did Alexander the Great Really Die?

    Home

    Health & Medicine

    Anatomy & Physiology

    Science & Tech

    egg

    biology

    Actions

    Cite

    verifiedCite

    While every effort has been made to follow citation style rules, there may be some discrepancies.

    Please refer to the appropriate style manual or other sources if you have any questions.

    Select Citation Style

    MLA

    APA

    Chicago Manual of Style

    Copy Citation

    Share

    Share

    Share to social media

    Facebook

    Twitter

    URL

    https://www.britannica.com/science/egg-biology

    Give Feedback

    External Websites

    Feedback

    Corrections? Updates? Omissions? Let us know if you have suggestions to improve this article (requires login).

    Feedback Type

    Select a type (Required)

    Factual Correction

    Spelling/Grammar Correction

    Link Correction

    Additional Information

    Other

    Your Feedback

    Submit Feedback

    Thank you for your feedback

    Our editors will review what you’ve submitted and determine whether to revise the article.

    External Websites

    USDA Food Safety and Inspection Service - Biology of Eggs

    National Center for Biotechnology Information - Eggs

    Stanford University - Eggs and Their Evolution

    University of Lucknow - Egg: Structure

    The Home of the Royal Family - The Duke of Sussex

    Britannica Websites

    Articles from Britannica Encyclopedias for elementary and high school students.

    egg - Children's Encyclopedia (Ages 8-11)

    egg - Student Encyclopedia (Ages 11 and up)

    Print

    Cite

    verifiedCite

    While every effort has been made to follow citation style rules, there may be some discrepancies.

    Please refer to the appropriate style manual or other sources if you have any questions.

    Select Citation Style

    MLA

    APA

    Chicago Manual of Style

    Copy Citation

    Share

    Share

    Share to social media

    Facebook

    Twitter

    URL

    https://www.britannica.com/science/egg-biology

    Feedback

    External Websites

    Feedback

    Corrections? Updates? Omissions? Let us know if you have suggestions to improve this article (requires login).

    Feedback Type

    Select a type (Required)

    Factual Correction

    Spelling/Grammar Correction

    Link Correction

    Additional Information

    Other

    Your Feedback

    Submit Feedback

    Thank you for your feedback

    Our editors will review what you’ve submitted and determine whether to revise the article.

    External Websites

    USDA Food Safety and Inspection Service - Biology of Eggs

    National Center for Biotechnology Information - Eggs

    Stanford University - Eggs and Their Evolution

    University of Lucknow - Egg: Structure

    The Home of the Royal Family - The Duke of Sussex

    Britannica Websites

    Articles from Britannica Encyclopedias for elementary and high school students.

    egg - Children's Encyclopedia (Ages 8-11)

    egg - Student Encyclopedia (Ages 11 and up)

    Written and fact-checked by

    The Editors of Encyclopaedia Britannica

    Encyclopaedia Britannica's editors oversee subject areas in which they have extensive knowledge, whether from years of experience gained by working on that content or via study for an advanced degree. They write new content and verify and edit content received from contributors.

    The Editors of Encyclopaedia Britannica

    Article History

    Table of Contents

    structural components of an egg

    See all media

    Category:

    Science & Tech

    Related Topics:

    yolk

    fertilizin

    albumen

    eggshell

    vitelline membrane

    (Show more)

    See all related content →

    egg, in biology, the female sex cell, or gamete. In botany, the egg is sometimes called a macrogamete. In zoology, the Latin term for egg, ovum, is frequently used to refer to the single cell, while the word egg may be applied to the entire specialized structure or capsule that consists of the ovum, its various protective membranes, and any accompanying nutritive materials. The human female reproductive cell is also usually called an ovum.The egg, like the male gamete, bears only a single (haploid) set of chromosomes. The egg, however, is usually larger than its male counterpart because it contains material to nourish the embryo during its early stages of development. In many animal species a large quantity of nutritive material, or yolk, is deposited in the egg, the amount depending on the length of time before the young animal can feed itself or, in the case of mammals, begins to receive nourishment from the maternal circulation. The plant egg is never so disproportionately large, because the developing sporophyte embryo is nourished until self-supporting by the plant on which it is formed (in liverworts, mosses, and ferns by the gametophyte; in seed plants by the sporophyte on which the gametophyte is parasitic).

    Britannica Quiz

    Characteristics of the Human Body

    A variety of bird eggs.With the exception of those of some cnidarians (coelenterates), all animal eggs are enclosed by membranes, the innermost of which is called the vitelline membrane. The vitelline membrane is the only membrane in the eggs of various invertebrates—ctenophores, many worms, and echinoderms—and of certain lower chordates. All higher vertebrates and many invertebrates have one or more additional membranes. Insect eggs, for example, are covered by a thick, hard chorion, and the amphibian egg is surrounded by a jelly layer. The bird egg includes the vitelline membrane, the white of the egg, two egg shell membranes, and the outermost membrane, the shell. As pointed out above, this entire structure is commonly referred to as an egg.

    Mature eggs remain functional for a relatively short period of time, after which fertilization cannot occur. The eggs of most invertebrates, fish, and amphibians must be fertilized a few minutes after they are shed into the water; an exception is sea urchin eggs, which are viable for about 40 hours after their release. Most other animal eggs have life spans similar to that of the human egg—i.e., 12 to 24 hours. See also ovum.

    This article was most recently revised and updated by Kathleen Kuiper.