今天初次使用express,还是写写心得好了。

  1. 中间件
  2. mothod
  3. nodemon
  4. ~的使用

中间件

中间件我觉得就是个开箱即用的工具,写好中间件函数,直接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的更多相关文章

  1. 初次接触json...

    这两天发现很多网站显示图片版块都用了瀑布流模式布局的:随着页面滚动条向下滚动,这种布局还会不断加载数据并附加至当前尾部.身为一个菜鸟级的程序员,而且以后可能会经常与网站打交道,我觉得我还是很有必要去尝 ...

  2. 初次接触GWT,知识点总括

    初次接触GWT,知识点概括 前言 本人最近开始研究 GWT(Google Web Toolkit) ,现将个人的一点心得贴出来,希望对刚开始接触 GWT的程序员们有所帮助,也欢迎讨论,共同进步. 先说 ...

  3. [Docker]初次接触

    Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔 ...

  4. 初次接触:DirectDraw

    第六章 初次接触:DirectDraw 本章,你将初次接触DirectX中最重要的组件:DirectDraw.DirectDraw可能是DirectX中最强大的技术,因为其贯穿着2D图形绘制同时其帧缓 ...

  5. 初次接触scrapy框架

    初次接触这个框架,先订个小目标,抓取QQ首页,然后存入记事本. 安装框架(http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html) ...

  6. javaweb中的乱码问题(初次接触时写)

    javaweb中的乱码问题 在初次接触javaweb中就遇到了乱码问题,下面是我遇到这些问题的解决办法 1. 页面乱码(jsp) 1. 在页面最前方加上 <%@ page language=&q ...

  7. 初次接触Java

    今天初次接触Eclipse,学着用他来建立java工程,话不多说,来看看今天的成果! 熟悉自己手中的开发工具,热热身 刚上手别慌,有问题找度娘 刚刚拿到这个软件的安装包我是一脸懵逼的,因为是从官网下载 ...

  8. -1.记libgdx初次接触

    学习一门技术最难的是开发环境变量配置和工具配置,以下为我初次接触libgdx时遇到的问题 几个难点记录下 gradle 直接用下到本地,然后放到d盘,链接到就行(gradle-wrapper.prop ...

  9. tensorflow初次接触记录,我用python写的tensorflow第一个模型

    tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...

随机推荐

  1. Human life FZU - 2295 最大权闭合子图(第一次遇到被教育了)

    Xzz is playing a MMORPG "human life". In this game, there are N different skills. Some ski ...

  2. echarts.js中的图表大小自适应

    echarts的图表,如果父级容器的height/width属性设置为百分比的形式,那么echarts就会warning,且不能正常的生成图表.所以div容器的高度宽度必须指定为px,这设计不知道是为 ...

  3. vue-cli中引入jquery的方法

    vue-cli中引入jquery的方法 以前写vue项目都没有引入过jquery,今天群里面的一位小伙伴问了我这个问题,我就自己捣鼓了一下,方法如下: 我们先进入webpack.base.conf.j ...

  4. 双向数据绑定实现之Object.defineProperty

    vue.js利用的是es5的 defineproperty 特性实现的双向数据绑定,了解一下基本原理. 举例 var person= {}; Object.defineProperty(person, ...

  5. [LeetCode] 15. 3Sum ☆☆

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  6. LightOJ 1226 - One Unit Machine Lucas/组合数取模

    题意:按要求完成n个任务,每个任务必须进行a[i]次才算完成,且按要求,第i个任务必须在大于i任务完成之前完成,问有多少种完成顺序的组合.(n<=1000 a[i] <= 1e6 mod ...

  7. 基本控件文档-UISwitch属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  8. Go从入门到精通(持续更新)

    1.0 搭建环境 由于我们 Go官方网站 在我大天朝被和谐了,所以我们只能去 Go语言中文网 来下载了.Go的安装很简单,不像Java还要配置一大堆的东西,选择自己系统的对应版本,下载安装,像安装QQ ...

  9. ubuntu 玩转 nodejs

    安装nginx 首先添加nginx_signing.key(必须,否则出错) $ wget http://nginx.org/keys/nginx_signing.key $ sudo apt-key ...

  10. Nodejs mac版安装

    Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven ...