egg后端服务创建即使用(一)

简介: 框架内置 egg-view 作为模板解决方案,并支持多模板渲染,每个模板引擎都以插件的方式引入,但保持渲染的 API 一致。查看如何使用模板,如果想更深入的了解,可以查看模板插件开发。

egg如何创建项目


一、创建


第一种方法:


$ mkdir egg-example && cd egg-example
$ npm init egg --type=simplek
$ npm i


第二种、方法:


npm i egg-init -g
egg-init egg-example --type=simple


--type+骨架类型


simple 简单egg应用程序框架
   enpty 空的egg应用程序框架
   plugin egg plugin骨架
   framework egg framework骨架


二、安装依赖


npm install --save egg-sequelize mysql2 sequelize-auto egg-view-nunjucks
egg-view-nunjucks--安装的模板引擎


模板引擎


框架内置 egg-view 作为模板解决方案,并支持多模板渲染,每个模板引擎都以插件的方式引入,但保持渲染的 API 一致。查看如何使用模板,如果想更深入的了解,可以查看模板插件开发。


可使用以下模板引擎:


  • egg-view-nunjucks
  • egg-view-react
  • egg-view-vue
  • egg-view-ejs
  • egg-view-handlebars
  • egg-view-pug
  • egg-view-xtpl


三、运行


cd edd-example
npm i


四、egg目录


- app                        - 项目开发的主目录,工作中的代码几乎都写在这里面
-- controller                -- 控制器目录,所有的控制器都写在这个里面
-- router.js                 -- 项目的路由文件
- config                     - 项目配置目录,比如插件相关的配置
-- config.default.js         -- 系统默认配置文件
-- plugin.js                 -- 插件配置文件
- logs                       -- 项目启动后的日志文件夹
- node_modules               - 项目的运行/开发依赖包,都会放到这个文件夹下面
- test                       - 项目测试/单元测试时使用的目录
- run                        - 项目启动后生成的临时文件,用于保证项目正确运行
- typings                    - TypeScript配置目录,说明项目可以使用TS开发
- .eslintignore              - ESLint配置文件
- .eslintrc                  - ESLint配置文件,语法规则的详细配置文件
- .gitignore                 - git相关配置文件,比如那些文件归于Git管理,那些不需要
- jsconfig.js                - js配置文件,可以对所在目录下的所有JS代码个性化支持
- package.json               - 项目管理文件,包含包管理文件和命令管理文件
- README.MD                  - 项目描述文件  


五、dev和start的区别


打开package.json文件的scripts属性中,有下面这样一段代码。


"scripts": {
    "start": "egg-scripts start --daemon --title=egg-server-egg",
    "stop": "egg-scripts stop --title=egg-server-egg",
    "dev": "egg-bin dev",
    "debug": "egg-bin debug",
    "test": "npm run lint -- --fix && npm run test-local",
    "test-local": "egg-bin test",
    "cov": "egg-bin cov",
    "lint": "eslint .",
    "ci": "npm run lint && npm run cov",
    "autod": "autod"
  },


其中有 start 和dev,这两个是有区别的,我在上节也简单的一嘴概括了。这里给大家详细的解释一下。


dev : 开发环境中使用,不用重启服务器,只要刷新。修改内容就会更改。 start:生产环境中使用,也就是开发完成,正式运营之后。以服务的方式运行。修改后要停止和重启后才会发生改变。


六、新页面配置路由


在app/controller里面新建一个js,如:home.js


1、新建 /app/controller/home.js


'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = 'Hello World';
    }
    async content() {
        const { ctx } = this;
        const query = ctx.query;
        console.log('query', query);
        ctx.body = '内容信息';
    }
}
module.exports = HomeController;


注意的是Egg.js全部使用异步模式async。


此时页面打开http://127.0.0.1:7001/home/content, 但非常抱歉,这时并不能给你返回正确的结果。因为写完页面以后,还需要去配置路由router.js。


2、在/app/router.js里面配置路由


module.exports = app => {
  const { router, controller } = app;
  router.get('/', controller.home.index);
  router.get('/home/content', controller.home.content);
};


这样设置完路由后就能正常访问了


这些配置,开发时只要安装Egg.js的约定去写,这些配置它已经为我们处理好了。这也就是框架的设计理念约定优于配置.


七、Controller控制器的使用


Controller是什么?


动手操作之前,我们需要先学点理论知识。Controller,也就是控制器,简单说Controller负责解析用户的输入,处理后返回相应的结果。但是由于开发形式的不同,Controller的具体作用还是有一些区别的。


在RESTful接口中,Controller接受用户的参数,从数据库中查找内容返回给用户或者将用户的请求更新到数据库中。 在HTML页面请求中,Controller根据用户访问不同的URL,渲染不同的模板得到HTML返回给用户。 在代理服务器中,


Controller将用户的请求转发到其它服务器上,并将其它服务器的处理结果返回给用户。 官方给的建议是Controller层主要对用户的请求参数进行处理(校验、转换),然后调用对应的service方法处理业务,得到业务结果封装并返回。


八、get和post的请求


一、自定义模式传值


地址http://127.0.0.1:7001/test?name=李四&age=80


控制器里取值


/app/controller/test.js


class TestController extends Controller {
  async index() { //  自由传参模式
    const ctx = this.ctx;
    ctx.body = ctx.query;   --{"name":"李四","age":"80"}
  }
}
module.exports = TestController;


router.js


module.exports = app => {
  const { router, controller } = app;
  router.get('/test', controller.test.index);
};


二、严格传参模式


地址 http://127.0.0.1:7001/test/detail/小红/29

/app/controller/test.js


class TestController extends Controller {
  async detail() {//  严格传参模式
    const ctx = this.ctx;
    ctx.body = 'getGirl:' + ctx.params.name;
  }
}


router.js


module.exports = app => {
  const { router, controller } = app;
  router.get('/test/detail/:name/:age', controller.test.detail);  --name/age传的参数
};


--- ctx.params.name 获取严格传的name参数 --- ctx.params.age 获取严格传的age参数


** 严格传参模式较安全,可以防止攻击和请求参数泄露

相关文章
|
2天前
|
弹性计算 监控 负载均衡
|
2月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
3月前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的完美搭档
【8月更文挑战第28天】在追求高性能、可扩展和易维护的后端开发领域,Node.js和Express框架的组合提供了一种轻量级且灵活的解决方案。本文将深入探讨如何利用这一组合打造高效的后端服务,并通过实际代码示例展示其实现过程。
|
3月前
|
前端开发 JavaScript NoSQL
构建苏宁商品详情页:从前端展示到后端服务的实战指南
苏宁商品详情页集成前端展示与后端服务,前端利用HTML/CSS/JavaScript呈现信息,后端采用Node.js/Java/Python等技术处理请求并从MySQL/MongoDB等数据库获取数据。示例中,Node.js通过Express框架搭建API,模拟商品查询逻辑。实际应用更为复杂,涵盖用户评价、推荐等功能,并需考虑分布式架构、安全防护及性能优化等方面。
构建苏宁商品详情页:从前端展示到后端服务的实战指南
|
3月前
|
JavaScript 安全 API
构建高效后端服务:RESTful API 设计与实现
【8月更文挑战第31天】在数字化时代,一个清晰、高效且安全的后端服务是应用程序成功的关键。本文将深入探讨如何设计并实现一个遵循REST原则的API,确保服务的可扩展性和维护性。我们将从基础概念出发,逐步引入真实代码示例,展示如何利用现代技术栈创建高性能的后端服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和实用的技巧。
|
3月前
|
存储 SQL 缓存
深入浅出:构建高效后端服务的五大原则
在数字化浪潮中,后端服务作为技术架构的核心,承载着数据处理和业务逻辑的重要任务。本文将深入探讨如何构建一个高效、稳定且可扩展的后端服务,从五个关键原则出发,带领读者一步步理解并实践这些原则,以确保后端系统能够灵活应对各种挑战。
|
3月前
|
监控 JavaScript 前端开发
深入浅出Node.js: 打造高效的后端服务
【8月更文挑战第27天】在这个数字化飞速发展的时代,后端技术成为支撑互联网服务的基石。Node.js作为其中的佼佼者,以其非阻塞I/O模型、事件驱动架构和丰富的生态系统,赢得了开发者的青睐。本文将带领读者深入理解Node.js的核心概念,通过实际案例分析其应用模式,并探讨如何利用Node.js构建高效、可扩展的后端服务。无论你是初学者还是有经验的开发者,都能在这篇文章中找到提升你的Node.js技能的灵感和知识。
|
3月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的深度整合
【8月更文挑战第27天】 在现代Web开发中,后端服务的高效性至关重要。本文深入探讨了如何利用Node.js的非阻塞I/O特性和Express框架的简洁性来打造高性能的后端服务。我们将通过具体案例,展示如何在不牺牲代码可读性和可维护性的前提下,实现高效的请求处理和服务端逻辑。文章旨在为开发者提供一个清晰的指导,帮助他们在构建后端服务时做出更明智的技术选择。
|
3月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
56 2
|
3月前
|
缓存 网络协议 API
【API管理 APIM】APIM中对后端API服务的DNS域名缓存问题
【API管理 APIM】APIM中对后端API服务的DNS域名缓存问题