node学习笔记

Posted by 梧桐和风的博客 on March 26, 2017

node笔记

  1. 每个文件就是一个模块,文件路径就是模块名,每个模块都有requireexportsmodule三个预先定义好的变量。
  2. require函数用于在当期模块加载使用其他模块,js后缀可省略。

模块路径解析规则

  1. 内置模块,直接在require中写模块名,如require('fs').
  2. node_modules目录,node项目有一个专门储存模块的目录,为node_modules。如require('express'),需保证项目node_modules目录有express模块。

路由定义

app.METHOD(path,[callback],callback)

METHOD是一个HTTP请求方法。path是服务器路径,callback是当路由匹配时要执行的函数。如app.post('/',function(){});将匹配请求根目录的post请求。

app.all()是一个特殊路由方法,会匹配所有请求。用于在某一路径加载中间件。

路由路径

可使用字符串或正则匹配

路由处理函数

可以为请求提供多个处理函数,只有最后一个处理函数可以返回结果(调用res方法向客户端返回响应),其他需使用next()调用其他路由。

也可直接指定路由处理函数数组处理。

响应方法

中间件是一个函数。用于对请求进行处理。如果中间件没有终结请求,则必须调用next()函数

  1. 应用级中间件 绑定到app对象,使用app.use或app.METHOD,
  
  var app = express();

  // 没有挂载路径的中间件,应用的每个请求都会执行该中间件
 app.use(function (req, res, next) {
  console.log('Time:', Date.now());
  next();
});

 // 挂载至 /user/:id 的中间件,任何指向 /user/:id 的请求都会执行它
app.use('/user/:id', function (req, res, next) {
  console.log('Request Type:', req.method);
  next();
});

 // 路由和句柄函数(中间件系统),处理指向 /user/:id 的 GET 请求
app.get('/user/:id', function (req, res, next) {
  res.send('USER');
});
  

使用 next(‘route’)方法跳过中间件栈跳过剩余中间件。可将控制权交给下一个路由。注意: 它只对 app.VERB()router.VERB()有用。

错误处理中间件

错误处理中间件必须使用4个参数,否则会被识别为普通中间件。


app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

如果向next()传入参数,除‘route’外,Express会认为当前请求存在错误,会忽略所有中间件函数,去寻找异常处理的中间件。

next()和next(err) 类似于Promise.resolve()和Promise.reject()。

内置中间件

express.static(root,[options])

Express唯一内置中间件。负责托管静态资源。其他中间件均为第三方中间件。