NodeJs 面试常见问题汇总以及参考链接

1、使用过的koa2中间件

  • 1、koa-router
    koa.js为了保持自身的精简,并没有像 Express.js自带了路由功能,因此koa-router做了很好的补充,提供了全面的路由功能,比如类似 Express的app.get/post/put的写法,URL命名参数、路由命名、支持加载多个中间件、嵌套路由等

  • 2、koa-bodyparser
    koa.js并没有内置 Request Body的解析器,当我们需要解析请求体时,需要加载额外的中间件,官方提供的koa-bodyparser是个很不错的选择,支持x-w-form-urlencode、application/json等格式的请求体,但不支持form-data的请求体,需要借助koa-body;

  • 3、koa-views
    视图模板渲染中间件

  • 4、koa-static
    用作类似 Nginx的静态文件服务,在本地开发时特别方便,可用于加载前端文件。

  • 5、koa-jwt
    koa-jwt这个中间件使用JWT认证HTP请求

  • 6、koa-logger
    koa-logger提供了输出请求日志的功能,包括请求的url、状态码、响应时间、响应体大小等信息,对于调试和跟踪应用程序特别有帮助。

2、koa-boy原理

koa-body可以实现文件上传,同时也可以让koa能获取post请求的参数。

3、koa中自定义中间件

下边,我是写了一个异常捕获中间件,在 app s中使用app.use()注册即可

//errMiddLeWare.js
const errMiddleWare = async (ctx,next)=>{
    
    
try{
    
    
  //加上了 await,相当于等所有的中间件都执行完毕后,这个next才会执行
   await next();
}catch(err){
    
    
   ctx. body = "服务器异常,请稍后!";
}
module exports = {
    
    
   errMiddleWare
}

在app.js中使用

//app. js
const App= require(koa') //koa框架
const {
    
     errMiddleWare } = require("./errMiddleWare/errMiddleware.js");
const app = new App()
app.use(errMiddleWare)//注册自定义异常捕获中间件
app.listen(3000)

4、有没有涉及到cluster

cluster模块可以创建共享服务器端口的子进程

单个Node.js实例运行在单个线程中。为了充分利用多核系统,有时需要启用一组Node.js进程,去处理负载任务

const cluster = require ('cluster');
const http = require('http')
const numCPUs = require('os').cpus().length;
if (cluster.isMaste){
    
    
  console.log(`主进程${
      
       process.pid}正在运行`);
  //衍生工作进程
  for(let i =0;i<numCPUs;i++){
    
    
    cluster.fork();
  }    
  cluster.on('exit',(worker, code, signal)=>{
    
    
    console.1og(`工作进程${
      
      worker process.pid}已退出`
  })
}else{
    
    
  //工作进程可以共享任何TCP连接
  //在本例子中,共享的是HTTP服务器
  httpcreateserver((req,res)=>{
    
    
    res,end("你好世界\n");
  }).1isten(8888);

  console.log(`工作进程${
      
       process.pid }已启动`);

5、介绍pm2

pm2是node进程管理工具,可以利用它来进行性能监控、自动重启、负载均衡

6、主线程master挂了的话,pm2怎么处理

  • Node.js执行环境
    首先,你应该知道,Node.js是一个运行在名叫V8的javaScript引擎上的平台系统。V8本身是单线程的,并没有充分利用多核系统能力。(注:Node执行JS代码运行在V8上,是单线程,但并非真正的单线程架构)

  • Node.js的集群模式
    Node.js提供了集群模块,简单讲,就是复制一些可以共享TCP连接的工作线程

  • Node.js的集群模式的工作原理
    集群模块会创建一个 master主线程,然后复制任意多份程序并启动,这叫做工作线程。工作线程通过IPC频道进行通信,并且使用了Round-robin algorithm箅法进行工作调度以此实现负载均衡。Round-robin algorithm箅法调度策略主要是 master主线程负责接收所有的连接并派发给下面的各个工作线程。

  • PM2的方式实现集群模式
    PM2内置了内置了集群模式。只需启动时执行如下:
    pm2 start app.js -i 4
    如果i为0表示,会根据当前CPU核心数创建
    4表示实例程序的个数,就是工作线程;
    在这里插入图片描述
    pm2保持你的程序不中断运行,如果任何一个程序中断,就会立即重启;或者使用如下命令重启
    pm2 restart all在这里插入图片描述
    实时调整集群数量
    你可以使用命令pm2 scale调整你的线程数量,如pm2 scale app+3会在当前基础上加3个工作线程。
    在这里插入图片描述

7、node连接mysql数据库

参考链接:https://blog.csdn.net/yiyueqinghui/article/details/113499944

Guess you like

Origin blog.csdn.net/yiyueqinghui/article/details/121472367