express是一个网络框架,基于http模块。如果你用express官方的项目生成器,可以在bin/www中看到下面的代码:
通过应用生成器工具 express-generator 可以快速创建一个应用的骨架。
安装指令 npm install express-generator -g
使用命令:express [项目名] -v
项目根目录下有4个自带的文件夹
bin:存放项目源代码的文件夹。
public:项目静态文件夹。
routers:存放路由的文件夹。
views:存放模板的文件夹。
注意:创建的项目中没有node_modules文件夹,但是在package.json中写好了依赖项,所以创建完项目之后需要先npm install 安装依赖项。****
运行项目的命令是 npm start
- 执行node ./bin/www这个文件,这个文件创建/启动服务器,除此之外又记录了服务器运行日志,以及服务器在运行过程监听错误,监听其他信息等。
但注意在创建服务器时,使用了app.js入口文件。
- app.js做了什么工作?
app.js引入各种模块包,其中最重要是express框架,使用框架包创建应用程序实例,在应用程序运行过程中,需要其他模块包配合它。比如:http-error记录请求过程中的错误信息。再比如morgan记录请求日志,
再比如cookie-parser记录cookie解析。还是express.json(),express.urlencoded()。相对比较重要的路由中间件(必须掌握如何定义路由)。
在bin目录下的www.js文件中添加如下代码在控制台中打印出访问地址:
console.log('服务器启动成功! 地址:http://localhost:' + port)
2.app.js介绍
3. 修改express配置
使用nodemon进行代码热更新
4.关于路由和中间件
路由:URL到函数的映射。Route是一条路由:就是把路径与函数进行一一对应,通过路径信息调用特定的函数,Routers则负责管理route与函数之间的映射关系。路由分为静态路由和动态路由,静态内容的路由都是固定的。动态的内容则不是,我们可以通过传递参数而获取某个用户的信息,而不是单独设置一条静态路由。
通过express创建一个路由
var router = express.Router();
通配符: :id相当于任何的参数,但是不能为空
router.get('/delete/:id', function(req, res, next) { console.log(req.params.id); res.send('respond3 with a resource'); });
中间件:所谓中间件其实也是一个路由,是一个可以处理所有http请求的路由.
1.路由处理器第一个参数必须是路径,如果要让一个路由匹配所有的路径,可以用 /* .
中间件也可以用路径作为第一个参数,而它是可选的,如果忽略了这个参数,它就会匹配所有的路径。
2.路由处理器和中间件参数都有回调,回调有2个参数时,是(req,res);回调有3个参数时,是(req,res,next);有4个参数时,是(err,req,res,next);
3.next。如果在中间件回调中调用了next(); 程序就会继续匹配下一个合适的路由处理器,如果你没有在中间件调用next()的话,中间件在处理完之后就会被终止,不会继续匹配相应的路由处理器,这时应该要发送响应到客户端,否则客户端会被挂起最终超时。
4.如果在中间件回调中调用了next();就不宜发送响应到客户端了,因为你发送了响应,之后的中间件或者路由器还会继续匹配执行,但是它们发送的任何响应都会被忽略。
中间件:在请求和响应之间封装一层处理请求的模块,本质是一个函数,可以对请求进行处理和加工,然后交给具体的接口,如果找不到对应的接口,就会报错.一般会在中间添加next函数,保证中间件不会拦截掉请求.