nodejs学习重点三

6 篇文章 0 订阅
4 篇文章 0 订阅

1. 为什么使用express?

由于NodeJs本身的异步非阻塞特性和对http的天然支持,所以使用NodeJs编写高性能,可伸缩的Web服务器非常简单。但是开发完整的Web服务器还需要路由,错误处理,请求拦截,请求和响应的解析,模板引擎等功能,所以直接使用NodeJs的http模块开发起来还是挺痛苦的。

目前有很多的Web框架都是基于http模块封装而成,最流行的当属Express框架。

express类似于(thymeleaf )支持很多的模板引擎,每个模板引擎都有自己的语法。

Html页面本身是静态的,不含动态数据的。模板引擎的作用就是将从数据库读出来的,处理好的数据填充到html页面,然后返回给用户。

学习资源:

快速开始

  npm install express --save

快速开启服务器:

  const express = require('express');
  const app = express();
  ​
  app.get('/', function(req, res){
    res.send('hello world');
  });
  app.listen(3000);

静态文件

..静态文件的添加,不用重启服务器

express提供了托管静态文件的功能,比如html,图片,CSS,JavaScript等文件。

  app.use(express.static('public'));  // static是方法
  ..上面的'public'是文件夹的名称,写成还是static的,那就找不到了!

支持指定挂载路径:

  app.use('/static', express.static('public'));

一般框架提供的静态文件托管功能,只是在开发环境使用。在生产环境,推荐交给反向代理服务器来管理,比如Nginx;最佳的做法是花点钱交给CDN(像阿里云)提供商来服务。

2. 什么是路由?

路由就是根据用户请求的url路径,交由对应的响应方法处理。

请求方法

  app.get('/', function (req, res) {
    res.send('GET request to the homepage');
  });
  ​
  // POST method route
  app.post('/', function (req, res) {
    res.send('POST request to the homepage');
  });

什么是模块化路由?

模块化路由是指我们可以将一组具有业务相关性的路由封装为一个router对象,然后挂载到指定路径。

3. 什么是中间件?

中间件就是整个请求——>响应流程中的一系列处理函数。路由也是属于中间件,是挂载了路径的中间件。

使用中间件有两点注意:

  1. next() 方法和 res.send() 必须调用一个,否则请求就会挂起,客户端等待响应。

  2. 中间件的顺序很重要,它是按照你注册的顺序执行的。

4. 什么是错误处理?

程序总会遇到错误,比如:传参错误,我们不小心调用了undifined,或者我们自己也可能抛出异常。当发生这些错误的时候我们需要给用户一个友好的回应,这就是错误处理。

定义错误处理中间件和定义其他中间件一样,除了需要 4 个参数,而不是 3 个,其格式如下 (err, req, res, next)。例如:

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

错误中间件返回的响应是随意的,可以响应一个 HTML 错误页面、一句简单的话、一个 JSON 字符串,或者其他任何您想要的东西。

在其他 app.use() 和路由调用后,最后定义错误处理中间件,比如:

  app.use(bodyParser());
  app.use(router);
  app.use(function(err, req, res, next) {
    // ...
  });

5. WebApp进程管理PM2

在生产环境我们不会使用node app.js的方式来开启程序,因为我们有这样的一些需求:

  • 如果进程崩溃了,需要重启

  • 监控当前进程的CPU使用率和内存占用

  • 搭建集群

进程管理器就能提供上面的功能,让我们的NodeJs进程永不退出。最流行的进程管理器有3个:

其中PM2除了提供上面的功能外,还可以监视程序的日志,错误提醒,并且内置了负载均衡器,界面还友好。所以我们选择使用PM2。

学习资源

第三方中间件:http://www.expressjs.com.cn/resources/middleware.html

API查询:http://www.expressjs.com.cn/4x/api.html

6. 异步异常的捕获

require(`express-async-errors` )

https://www.npmjs.com/package/express-async-errors

也就是直接使用npm里的这个异常捕获即可

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值