20210518第一天
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第一天相关推荐
- Python深度学习篇
Python深度学习篇一<什么是深度学习> Excerpt 在过去的几年里,人工智能(AI)一直是媒体大肆炒作的热点话题.机器学习.深度学习 和人工智能都出现在不计其数的文章中,而这些文章 ...
- Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几
Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...
- 使用myeclipse的第一步
使用myeclipse的第一步 将以下代码copy放在一个包中运行,然后在控制台输入任意字符,回车,然后控制台打印一串密匙,这里你输入的就是账号,控制台返回的就是注册码,点击MyEclipse-> ...
- 中级实训第一天的自学报告
目录[阅读时间:约10分钟] 中级实训第一天的自学报告 姓名:隐藏敏感信息 学号:隐藏敏感信息 一.Vi/Vim 二.Java 三.Ant 四.Junit [附加]五.SonarQube [附加]六. ...
- 提高班第三周周记(中秋第一天)
这是第三周,也是中秋节.没有月饼的中秋节.但我过得很充实.我很快乐,发自内心的. 中秋第一天早上贾琳师哥讲课.讲他为什么辞职来这里.他的确学成,有着令人羡慕的工资.可是他的问题让我触动. 提到了邓稼先 ...
- LeetCode中等题之在排序数组中查找元素的第一个和最后一个位置
题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以 ...
- 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构
本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...
- Shiro第一个程序:官方快速入门程序Qucickstart详解教程
目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...
- 外部NORFlash是第一个以硬件为基础的信任
外部NORFlash是第一个以硬件为基础的信任 External NOR Flash memory is first with hardware root-of-trust 英飞凌科技公司宣布了它声称 ...
最新文章
- SQL查询语句总是先执行SELECT?你们都错了。。。
- 台湾澎湖县启动返乡包机 春节疏运增加25个航班
- 【安卓开发】找出安卓手机耗电元凶
- @import和@class的区别
- mysql 事物状态有几种_mysql第三章 事务以及日志
- 的文件夹结构_小白指南:WordPress文件及目录结构解析
- sql 时间字符串转换
- Atitit.attilax重要案例 项目与解决方案与成果 v6 qa15
- 衬线字体、无衬线字体、等宽字体的定义和LaTeX命令以及text系列与family系列、series系列、shape系列的区别和联系
- 机顶盒文件服务器,智能网络机顶盒常见的六大玩法,别浪费了资源!
- M3DGIS三维电子沙盘大数据人工智能元宇宙地理信息系统第5课
- java mac excel 中文乱码_解决mac excel中文乱码的问题
- MachineLearning 4. 癌症诊断方法之 K-邻近算法(KNN)
- nexus5 博通芯片WIFI详解 (2)
- 组队竞赛删除公共字符
- 我的世界java边境之地_我的世界边境之地是否存在 我的世界边境之地大揭秘
- 2020年中国各省GDP简析
- eclipse设置pom.xml打开方式
- 树莓派串口配置(c++)
- 搭建ntp时间同步服务器,解决cm时间问题