初次接触express
今天初次使用express,还是写写心得好了。
- 中间件
- mothod
- nodemon
- ~的使用
中间件
中间件我觉得就是个开箱即用的工具,写好中间件函数,直接use就好。
示例1:
let myLogger = (req, res, next) => {
console.log('hi');
}
app.use(myLogger);
示例2:
// 匿名函数
app.use((req, res, next) => {
console.log('hi');
});
另外,中间件的参数有err(错误),req(请求),res(响应),next(下一个中间件),执行完当前中间件需要调用next();不然后面的get、post、use都不会执行。
示例1:
// 匿名函数
app.use((req, res, next) => {
console.log('hi');
next(); // 注释掉这一句就不会走下面的get
});
app.get('/', (req, res) => {
console.log('im get');
});
中间件的顺序也是有规定的,如果中间件调用的位置错误,很有可能报错。
示例1:
// 立马抛出404
app.use((req, res, next) => {
throw Error('404 not found');
});
// 下面将不会调用
app.get('/', (req, res) => {
console.log('im get');
});
所以要按逻辑顺序排列,如:请求/api/user?api-key=foo
,如果要在/api
的时候做处理,那就app.use('/api',()=>{doSomething();next()})
,然后再请求app.get()
,最后放抛出异常的use。
示例1:
app.use('/api', (req, res, next) => {
// 遇到错误立马调用下一个中间件并返回
if (!key) return next(error(400, 'api-key required'));
next();
});
app.get('/api/users', (req, res, next) => {
res.send(users);
});
app.use((err, req, res, next) => {
res.status(err.status || 500);
res.send({error: err.message});
});
app.use((req, res) => {
res.status(404);
res.send({error: '404 not found'});
});
method
method其实是个很小的东西了,对应get、post、put、delete等。
在express调用的模式就是app.method()
示例1:
app.get('/', (req, res) => {
console.log('im get');
});
modemon
nodemon是一个小工具,类似webpack -w的东西,可以用npm全局安装。
省去了修改node主文件后需要重启node的麻烦。
具体用法:nodemon index.js
~的使用
这次还有一个收获就是~
。这是个神奇的符号,叫按位非。
示例1:
if (!~apiKeys.indexOf(key)) return next(error(401, 'invalid api key'));
- 如果在apiKeys里找不到key,那么indexOf的返回值就是-1,~以后就是0,!类型转换为true。
- 找的到key,返回值就是下标,~以后就是非零数,!类型转换为false。
结论:!~
的组合拳意思为不存在的时候执行。
初次接触express的更多相关文章
- 初次接触json...
这两天发现很多网站显示图片版块都用了瀑布流模式布局的:随着页面滚动条向下滚动,这种布局还会不断加载数据并附加至当前尾部.身为一个菜鸟级的程序员,而且以后可能会经常与网站打交道,我觉得我还是很有必要去尝 ...
- 初次接触GWT,知识点总括
初次接触GWT,知识点概括 前言 本人最近开始研究 GWT(Google Web Toolkit) ,现将个人的一点心得贴出来,希望对刚开始接触 GWT的程序员们有所帮助,也欢迎讨论,共同进步. 先说 ...
- [Docker]初次接触
Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔 ...
- 初次接触:DirectDraw
第六章 初次接触:DirectDraw 本章,你将初次接触DirectX中最重要的组件:DirectDraw.DirectDraw可能是DirectX中最强大的技术,因为其贯穿着2D图形绘制同时其帧缓 ...
- 初次接触scrapy框架
初次接触这个框架,先订个小目标,抓取QQ首页,然后存入记事本. 安装框架(http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html) ...
- javaweb中的乱码问题(初次接触时写)
javaweb中的乱码问题 在初次接触javaweb中就遇到了乱码问题,下面是我遇到这些问题的解决办法 1. 页面乱码(jsp) 1. 在页面最前方加上 <%@ page language=&q ...
- 初次接触Java
今天初次接触Eclipse,学着用他来建立java工程,话不多说,来看看今天的成果! 熟悉自己手中的开发工具,热热身 刚上手别慌,有问题找度娘 刚刚拿到这个软件的安装包我是一脸懵逼的,因为是从官网下载 ...
- -1.记libgdx初次接触
学习一门技术最难的是开发环境变量配置和工具配置,以下为我初次接触libgdx时遇到的问题 几个难点记录下 gradle 直接用下到本地,然后放到d盘,链接到就行(gradle-wrapper.prop ...
- tensorflow初次接触记录,我用python写的tensorflow第一个模型
tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...
随机推荐
- YBT 5.4 状态压缩动态规划
#loj 10170. 「一本通 5.4 例 1」骑士 看数据范围n<=10,所以不是搜索就是状压dp,又因为搜索会超时所以用dp dp[i][k][j]表示现已经放到第i行,前面共有k个,这一 ...
- 【神仙DP】【UVa11400】Lighting System Design
传送门 Description Translation 题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L.注意到,电压相同的灯泡只需要共享一个 ...
- libudev使用说明书
转http://blog.csdn.net/coroutines/article/details/38067805 1. 初始化 首先调用udev_new,创建一个udev library conte ...
- LVM分区
使用LVM对磁盘进行初始化 pvcreate /dev/vdd 创建卷组 vgcreate vg /dev/vdd 备注:vg是卷组的名称,可改变. 查看卷组的详细信息 vgdisplay 下图是我执 ...
- ACE中UDP通信
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/07/585205.html udp是一种无连接的协议,提供无连接不可靠的服务. 在ace中,通 ...
- 顺序统计:寻找序列中第k小的数
最直观的解法,排序之后取下标为k的值即可. 但是此处采取的方法为类似快速排序分块的方法,利用一个支点将序列分为两个子序列(支点左边的值小于支点的值,支点右边大于等于支点的值). 如果支点下标等于k,则 ...
- 同一台服务器(电脑)运行多个Tomcat
同一台电脑运行不能同时运行多个未修改过配置tomcat的原因在于:一台电脑的一个端口只能被一个程序使用,多个tomcat启动会因为端口号号被占用的原因而启动失败. 如果想要在一台电脑上同时运行多个to ...
- poi-对于word的操作(二)
poi对于word文本的底纹和下划线的样式的展现 package poi.test; import java.io.FileOutputStream; import java.math.BigInte ...
- Linux系统关闭防火墙端口
1. 打开防火墙端口 # iptables -I INPUT -p tcp --dport -j ACCEPT # iptables -I INPUT -p tcp --dport -j ACCEPT ...
- 【C++对象模型】第一章 关于对象
1.C/C++区别 C++较之C的最大区别,无疑在于面向对象,C程序中程序性地使用全局数据.而C++采用ADT(abstract data tpye)或class hierarchy的数据封装.类相较 ...