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。

结论:!~的组合拳意思为不存在的时候执行。

05-29 00:44