明知 | TypeScript 结合 egg.js 基本使用

简介: 小小又进入了学习状态,此时小小由于最近接触了js的相关内容,进而接触了一些ts相关的内容,所以小小本次主要学习的内容是ts。

小小又进入了学习状态,此时小小由于最近接触了js的相关内容,进而接触了一些ts相关的内容,所以小小本次主要学习的内容是ts。

安装相关依赖

这里安装两个依赖,分别为egg和ts

安装ts

这里需要确保首先安装了npm相关工具。
全局安装ts

npm install -g typescript

进行全局的测试

$ tsc -v
Version 3.2.2

这样就完成了本地全局的ts的安装

安装egg

这里实现全局安装egg,并初始化依赖项目。
创建工作目录

mkdir showcase && cd showcase

安装相关的依赖

npm init egg --type=ts

安装依赖

 npm i

运行项目

npm run dev

出现以下提示,即代表已经启动,并安装完成


C:\Users\Administrator\Desktop\untitled4555\ming>npm run dev

> ming@1.0.0 dev C:\Users\Administrator\Desktop\untitled4555\ming
> egg-bin dev

[egg-ts-helper] create typings\app\controller\index.d.ts (5ms)
[egg-ts-helper] create typings\config\index.d.ts (16ms)
[egg-ts-helper] create typings\config\plugin.d.ts (10ms)
[egg-ts-helper] create typings\app\service\index.d.ts (5ms)
[egg-ts-helper] create typings\app\index.d.ts (2ms)
2020-07-31 14:27:49,701 INFO 12416 [master] node version v13.11.0
2020-07-31 14:27:49,703 INFO 12416 [master] egg version 2.27.0
2020-07-31 14:27:59,512 INFO 12416 [master] agent_worker#1:28076 started (9799ms)
2020-07-31 14:28:10,469 INFO 12416 [master] egg started on http://127.0.0.1:7001 (20
765ms)

访问页面效果如上

编写控制器

这里编写相应的控制器
控制器目录如下所示

添加相对应的类的方法

public async show() {
    const { ctx } = this;
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    const page = ctx.query.page;
    console.log(page);
    const result = 'ming';
    console.log(result);
    await ctx.render('ming.tpl', result);
  }

添加相关路由

import { Application } from 'egg';

export default (app: Application) => {
  const { controller, router } = app;

  router.get('/', controller.home.index);
  router.get('/ming', controller.home.show);
};

添加模板渲染插件

编辑默认配置文件

import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';

export default (appInfo: EggAppInfo) => {
  const config = {} as PowerPartial<EggAppConfig>;

  // override config from framework / plugin
  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1596175919808_6331';

  // add your egg config in here
  config.middleware = [];

  // add your special config in here
  const bizConfig = {
    sourceUrl: `https://github.com/eggjs/examples/tree/master/${appInfo.name}`,
  };

  config.view = {
    defaultViewEngine: 'nunjucks',
    mapping: {
      '.tpl': 'nunjucks',
    },
  };

  // the return config will combines to EggAppConfig
  return {
    ...config,
    ...bizConfig,
  };
};

添加相关插件

import { EggPlugin } from 'egg';

const plugin: EggPlugin = {
  nunjucks: {
    enable: true,
    package: 'egg-view-nunjucks',
  },
};

export default plugin;

访问链接

http://127.0.0.1:7001/ming

出现模板内容

服务层编写

这里配置相关的服务层。

定义相关接口

export interface NewsItem {
  id: number;
  title: string;
}

编写相关的控制器

// 定义相关方法
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  public async list(name: number): Promise<NewsItem[]>{
    name = name;
    return [{id:3, title: "ming"}] ;
  }

在控制层中调用

 public async show() {
    const { ctx } = this;
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    const page = ctx.query.page;
    console.log(page);
    const result = 'ming';
    console.log(result);
    await ctx.render('ming.tpl', result);
  }

调用显示结果

此时完成了最基本的服务层的搭建

中间件

中间件一般用于jwt验证相关的内容。这里使用jwt做前后端的验证。

创建新的中间件目录

import { Context, Application, EggAppConfig } from "egg";

export default function uuidMiddleWare(options: EggAppConfig['uuid'], app: Application): any {
  return async (ctx: Context, next: () => Promise<any>) => {
    // name 就是 config.default.js 中 uuid 下的属性
    ctx = ctx;
    console.info(options.name);
    await next();
  };
}

创建相关的配置文件用于中间件读取相关的内容

 config.default.js 
 
import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';

export default (appInfo: EggAppInfo) => {
  const config = {} as PowerPartial<EggAppConfig>;

  // override config from framework / plugin
  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + '_1596175919808_6331';

  // add your egg config in here
  config.middleware = ['uuid'];

  // add your special config in here
  const bizConfig = {
    sourceUrl: `https://github.com/eggjs/examples/tree/master/${appInfo.name}`,
    local: {
      msg: 'local',
    },

    uuid: {
      name: 'ebuuid',
      maxAge: 1000 * 60 * 60 * 24 * 365 * 10,
    },
  };

  config.view = {
    defaultViewEngine: 'nunjucks',
    mapping: {
      '.tpl': 'nunjucks',
    },
  };

  // the return config will combines to EggAppConfig
  return {
    ...config,
    ...bizConfig,
  };
};

读取效果如下

目录
相关文章
|
2月前
|
Rust JavaScript 前端开发
Node.js 添加对 TypeScript 的实验性支持
Node.js 添加对 TypeScript 的实验性支持
139 53
|
3月前
|
JavaScript 前端开发 安全
【技术革新】Vue.js + TypeScript:如何让前端开发既高效又安心?
【8月更文挑战第30天】在使用Vue.js构建前端应用时,结合TypeScript能显著提升代码质量和开发效率。TypeScript作为JavaScript的超集,通过添加静态类型检查帮助早期发现错误,减少运行时问题。本文通过具体案例展示如何在Vue.js项目中集成TypeScript,并利用其类型系统提升代码质量。首先,使用Vue CLI创建支持TypeScript的新项目,然后构建一个简单的待办事项应用,通过定义接口描述数据结构并在组件中使用类型注解,确保代码符合预期并提供更好的编辑器支持。
84 0
|
6月前
|
JavaScript 前端开发 IDE
【TypeScript技术专栏】TypeScript与Node.js后端开发
【4月更文挑战第30天】TypeScript在Node.js后端开发中日益重要,作为JavaScript超集,它提供静态类型检查和面向对象编程,增强代码可靠性和维护性。集成TypeScript能带来类型安全、更好的IDE体验、易于维护的代码以及增强工具支持。通过安装TypeScript编译器、编写TypeScript文件、配置TSconfig,开发者可以在Node.js项目中利用其高级特性,提高代码质量和开发效率。实践案例显示,TypeScript能确保路由处理器的类型正确,降低错误率。随着社区发展,TypeScript成为提升Node.js开发体验的推荐选择。
151 0
|
SQL JavaScript 关系型数据库
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
|
6月前
|
JavaScript 前端开发 开发者
Vue工具和生态系统: Vue.js和TypeScript可以一起使用吗?
【4月更文挑战第18天】Vue.js与TypeScript兼容,官方文档支持在Vue项目中集成TypeScript。TypeScript作为JavaScript超集,提供静态类型检查和面向对象编程,增强代码准确性和健壮性。使用TypeScript能提前发现潜在错误,提升代码可读性,支持接口和泛型,使数据结构和函数更灵活。然而,不是所有Vue插件都兼容TypeScript,可能需额外配置。推荐尝试在Vue项目中使用TypeScript以提升项目质量。
113 0
|
6月前
|
JavaScript 前端开发 开发者
JavaScript(JS)和TypeScript(TS)的区别
JavaScript(JS)和TypeScript(TS)的区别
119 0
|
6月前
|
JavaScript
Vue3 + Typescript + Node.js 搭建elementUI使用环境
Vue3 + Typescript + Node.js 搭建elementUI使用环境
116 0
|
消息中间件 JavaScript 前端开发
毕设:wei-xin-mini + TypeScript + nest.js + typeORM 搭建的校园外卖系统
毕设:wei-xin-mini + TypeScript + nest.js + typeORM 搭建的校园外卖系统
58 0
|
JavaScript 前端开发 Cloud Native
Vue.js和TypeScript:如何完美结合
Vue.js和TypeScript:如何完美结合
94 0
|
SQL JavaScript 关系型数据库
保姆级教程——号称下一代Node.js,Typescript的orm的prisma 如何在nest.js中使用
保姆级教程——号称下一代Node.js,Typescript的orm的prisma 如何在nest.js中使用