20210518第一天

Express 框架学习

背景:

  • 直接用 nodejs 的内置模块去开发服务器需求写大量的底层代码。
  • 没有专门的路由机制。

Express :

  • 对 http 内置模块的封装:
 req.body // 客户端请求体的数据,可能是表单或 JSON 数据req.params // 请求 URI 中的路径参数req.query // 请求 URI 中的查询参数req.cookies // 客户端的 cookiesres.send('hello word'); // 发送一串 HTML 代码res.sendFile('file.zip'); // 发送一个文件res.render('index'); // 渲染一个模板引擎并发送res.status(404).send('Page Not Found'); // 设置状态码为 404,并返回 Page Not Found 字符串
  • 路由
// 路由定义
const app = express();
app.METHOD(PATH, HANDLER);
// app 就是一个 express 服务器对象
// METHOD 可以是任何小写的 HTTP 请求方法,包括 get、post、put、delete 等等
// PATH 是客户端访问的 URI,例如 / 或 /about
// HANDLER 是路由被触发时的回调函数,在函数中可以执行相应的业务逻辑// 例子
app.get('/', (req, res) => {res.send('Hello World');
});
  • 中间件

中间件指将具体的业务逻辑和底层逻辑解耦的组件.

在 Express 中,中间件分为 全局中间件 和 组件中间件。
用户请求 => 中间件1 => 中间件2 => 中间件3 => 路由 => 响应
客户端向服务器发起请求,然后服务器依次执行每个中间件,最后到达路由,选择相应的逻辑来执行。
中间件是按顺序执行的,因此在配置中间件时顺序非常重要。
中间件在执行内部逻辑的时候可以选择将请求传递给下一个中间件,也可以直接返回用户响应。

// 在 Express 中,中间件就是一个函数,接受3个参数:req, res, next, next 用来触发下个中间件的执行。// 全局中间件 通过 app.use 函数就可以注册中间件,并且此中间件会在用户发起任何请求都可能执行。
app.use(someMiddleware);
// 组件中间件 通过在路由定义时注册中间件,此中间件只会在用户访问该路由对应的 URI 时执行。
app.get('/middleware', someMiddleware, (req, res) => {res.send('Hello World');
});
  • 模板引擎 EJS
// 配置和使用模板
// 指定模板存放目录
app.set('views', '/path/to/templates');
// 指定模板引擎为 ejs
app.set('view engine', 'ejs');
// 使用 express 的 render API 来渲染这个模版文件
app.get('/', (req, res) => {res.render('index', {message: 'Hello Express',time: new Date().getTime()});
});
  • 静态文件服务

Express 已经自带了静态文件服务中间件 express.static.

// 我们添加静态文件中间件如下,并指定静态资源根目录为 public
app.use(express.static('public'));
// pubic 文件中的结构
public
├── css
│   └── style.css
└── img└── tuture-logo.png
// 这样就可以访问这些静态资源
http://localhost:3000/css/style.css
  • JSON API

在 Response 对象中,Express 为我们封装了一个 json 方法,直接就可以将一个 JavaScript 对象作为 JSON 数据返回。

res.json({ name: '今晚吃什么', menu: '猪杂米粉'});
// 链式指定状态码 默认200
res.status(404).json({ name: '今晚吃什么', menu: '猪杂米粉'});

JCE 语法学习

JCE文件是TAF框架中客户端和服务端的通信接口,通过JCE的映射实现远程对象调用。

// 导入其他 JCE 文件
#include "TgComm.jce"// 定义模块
module OEM
{}

基本类型:

类型 含义
void 只能在函数的返回值表示
bool 布尔值类型
void 有符号字符
void 有符号短整型
void 有符号整型

···
接口定义:
服务接口定义放在interface中,接口入参和出参可以是JCE支持的所有类型,其中出参需要用out标识。

module OEM
{struct GetUserInfoReq{0 require     int         uid;1 optional    int         type;};struct UserInfoRsp{0 require     int         uid;1 require     string      name;};interface UserService{int getUserInfo(GetUserInfoReq stReq, out UserInfoRsp stRsp);};
};
  • 公用的接口体抽取到公用Jce中,然后在各业务的Jce中include进来
  • 编写Jce时排列顺序依次为:导入、模块定义、结构体定义、接口定义
  • 同一个模块中禁止出现重名结构体(struct)、重名接口(interface)和重名函数
  • interface的名称一般和Jce文件同名,一般也会包含在Service和ServantObj中
  • 一个函数一般只包含一个入参(stReq)和一个出参(stRsp),入参在前出参在后
  • 注释函数时应标明函数时供终端用户使用还是后端管理系统使用
  • 设计结构体时,提取相同的字段,以提高复用性,减少冗余
  • 结构体中的字段编号从0开始,连续,禁止变更字段编号,必须和响应的字段对应
  • 选择合适类型的基本类型,依赖三方的字段尽量设置为string
  • 根据数值范围和精度要求,选择合适的整数类型和浮点类型
  • 所有结构体、字段、函数名尽量添加中文注释,标明含义和取值方式
  • 修改时尽量做到兼容之前协议,禁止删除或重命名结构体、字段、函数

20210518第一天相关推荐

  1. Python深度学习篇

    Python深度学习篇一<什么是深度学习> Excerpt 在过去的几年里,人工智能(AI)一直是媒体大肆炒作的热点话题.机器学习.深度学习 和人工智能都出现在不计其数的文章中,而这些文章 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 使用myeclipse的第一步

    使用myeclipse的第一步 将以下代码copy放在一个包中运行,然后在控制台输入任意字符,回车,然后控制台打印一串密匙,这里你输入的就是账号,控制台返回的就是注册码,点击MyEclipse-> ...

  4. 中级实训第一天的自学报告

    目录[阅读时间:约10分钟] 中级实训第一天的自学报告 姓名:隐藏敏感信息 学号:隐藏敏感信息 一.Vi/Vim 二.Java 三.Ant 四.Junit [附加]五.SonarQube [附加]六. ...

  5. 提高班第三周周记(中秋第一天)

    这是第三周,也是中秋节.没有月饼的中秋节.但我过得很充实.我很快乐,发自内心的. 中秋第一天早上贾琳师哥讲课.讲他为什么辞职来这里.他的确学成,有着令人羡慕的工资.可是他的问题让我触动. 提到了邓稼先 ...

  6. LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置

    题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...

  7. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...

  8. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  9. 外部NORFlash是第一个以硬件为基础的信任

    外部NORFlash是第一个以硬件为基础的信任 External NOR Flash memory is first with hardware root-of-trust 英飞凌科技公司宣布了它声称 ...

最新文章

  1. SQL查询语句总是先执行SELECT?你们都错了。。。
  2. 台湾澎湖县启动返乡包机 春节疏运增加25个航班
  3. 【安卓开发】找出安卓手机耗电元凶
  4. @import和@class的区别
  5. mysql 事物状态有几种_mysql第三章 事务以及日志
  6. 的文件夹结构_小白指南:WordPress文件及目录结构解析
  7. sql 时间字符串转换
  8. Atitit.attilax重要案例 项目与解决方案与成果 v6 qa15
  9. 衬线字体、无衬线字体、等宽字体的定义和LaTeX命令以及text系列与family系列、series系列、shape系列的区别和联系
  10. 机顶盒文件服务器,智能网络机顶盒常见的六大玩法,别浪费了资源!
  11. M3DGIS三维电子沙盘大数据人工智能元宇宙地理信息系统第5课
  12. java mac excel 中文乱码_解决mac excel中文乱码的问题
  13. MachineLearning 4. 癌症诊断方法之 K-邻近算法(KNN)
  14. nexus5 博通芯片WIFI详解 (2)
  15. 组队竞赛删除公共字符
  16. 我的世界java边境之地_我的世界边境之地是否存在 我的世界边境之地大揭秘
  17. 2020年中国各省GDP简析
  18. eclipse设置pom.xml打开方式
  19. 树莓派串口配置(c++)
  20. 搭建ntp时间同步服务器,解决cm时间问题

热门文章

  1. 基于51单片机和OLED屏幕的贪吃蛇游戏
  2. Unity 3D专栏 U3D预制包,很好很强大 (二)
  3. zabbix某一个代理服务器下面多个agent出现5分钟数据采集不到的告警的解决过程...
  4. 正则表达式nbsp;特殊用法
  5. Zookeeper原理详解
  6. 迷失轨迹官网android,迷失轨迹lost tracks
  7. 汪峰演唱会的线上营销和线下营销
  8. Tomcat8+JDK8安装与配置
  9. 入门网安学习之路第一天
  10. 超级总结:vs2008/2005 sp1 C++ 发布程序 .