node 基础知识

1,030 阅读8分钟

node的特点

  1. 他是一个JavaScript的运行环境
  2. 依赖于Chrome V8 引擎进行代码解释
  3. 事件驱动
  4. 非堵塞
  5. 单线程
  6. 轻量,适用于实时数据交互

exports和module.exports的区别

  1. exports是对module.exports引用
  2. node为每个模块提供一个exports变量,他指向module.exports
  3. 不能将它直接指向一个值,那样会改变他的指向
  4. 如果exports和module.exports同时存在,那么只显示module.exports

http请求和响应的报文格式和常见http状态码

  1. 请求: 请求行,请求头,空行,请求体
  2. 响应: 状态行,响应头,空行,响应头
  3. 编码格式 1.. 表示请求已发送 2.. 表示请求成功 3.. 表示等待用户进一步操作,重定向 4.. 表示页面加载错误 5.. 表示服务器错误

MIME类型有什么用

  1. http协议中定义文档性质及格式的标准
  2. 服务器通过MIME告知响应内容什么类型,而浏览器通过MIME类型来缺点如何让处理文档

模块加载机制

Nodejs遵循commonjs规范的模块加载机制,使用require加载文件,使用exports和module.exports导出文件

NPM的作用

  1. 允许用户从NPM服务器下载别人编写的第三方包到本地使用
  2. 允许用户从NPM服务器下载并安装别人编写的命令行程到本地使用
  3. 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用

url组成

协议+域名+端口+pathname+search+hash

fs文件操作模块能否删除一个非空目录,如果不能应该怎么做

不能 它只能删除空的目录 如果目录不为空,他必须先遍历文件夹,删除里面的内容,然后如果还有文件夹,继续遍历 从而递归执行操作,只有当里面的内容全部清空后,才会删除一个目录

exports 中Router要解决的问题?

  1. 可以认为他是一个处理中间件和控制器的微型app,他拥有和app类似的方法
  2. 他解决了把模块暴露给其他模块被滥用的风险

npm start命令,应该在哪里配置,在哪里可以正确运行?

  1. 在package.json 中的script中配置npm命令
    • key是npm的自定义命令名称
    • value是真正终端中执行的命令
  2. 在使用npm 运行自定义命令时, 需要确保命令路径的位置上拥有package.json文件

express生成器的作用是什么

可以通过express-generator可以快速创建一个应用骨架,包含一整套配置好的服务器配置,文件和文件夹,包括静态资源的暴露,路由和模板引擎的配置,以及错误页面的处理

请回答, 前端Ajax请求后端接口/api/getNews, 接口过程中, 都发生了什么?

首先前端代码运行在浏览器中,由浏览器的XMLHTTPRequest发起一个请求, 如果通过了跨域的检测, 进行http连接, 发送请求信息, 服务器触发对应监听的"/api/getNews"接口的回调函数, 执行其中的代码, 最后res返回响应的内容等给本次请求的地方.

请求对象中包含哪些内容

请求协议,请求方式,请求地址,请求头,请求头

响应对象中包含哪些内容

响应协议,响应状态码,响应状态信息,响应头,相应数据

express的优点

Express的优点是线性逻辑:

  1. 路由和中间件完美结合
  2. 通过中间件形式把业务逻辑细分,简化
  3. 随随便便的一个请求,通过一系列中间件处理后再响应给客户,在复杂的逻辑也线性了

###什么是中间件

  1. Express是一个自身功能及其简单,完全由路由和中间件构成的文本开发框架

  2. 他就是在操作各种中间件处理复杂的逻辑

  3. 非内置的中间件通过require导入就可以使用了

  4. 常用第三方中间件:

    • cookie-parser
    • ejs
    • express-session
    • http-errors
    • Multer
    • Nodemon
    • config-lite

express 缺点是什么

  1. express是基于callback来组合业务逻辑
  2. callback有两大缺点:
    1. 不可组合
    2. 异常不可捕获

同步/异步

同步操作

所以线程都得等待,只有上一段代码执行完毕,然后下一段代码才会执行,堵塞线程

异步操作

不会等待,当有程序在执行过程中,后面的代码继续执行,当异步操作成功,一般使用回调函数来处理异步成功的动作

ejs

EJS是JavaScript的模板库,用来从json数据生HTML文件

koa

优点:
  1. 借助promise和generator的能力,丢掉callback,完美解决异步组合问题和异步异常捕获问题
  2. koa把router,view等功都移除了,更加轻量级
缺点
  1. Connect/Express 的中间件基本不能重用,基本要重写

pug

  1. pug是一款健壮,灵活,功能丰富的HTML模板引擎,专门为Node.js平台开发
  2. 是一种通过缩减方式编写代码,不需要考虑闭合标签,可以提高速度和复用性

设计一个前后端交互的流程?

前端编写HTML+CSS代码以后, 通过JS的Ajax进行网路请求, 请求后台指定的数据接口, 根据业务需求, 可以还需要传递参数等信息, 获取数据以后, 进行JSON解析和DOM创建展示. 服务器端 编写接口, 接收参数等, 连接数据库, 根据业务逻辑编写业务代码, 返回不同的数据

分页功能,前后的如何交互

分页功能分前后端

  1. 前端
    • 根据页码数,截取后台返回的全部数据,进行分段展示
  2. 前后端配合
    • 传递页码数给后台,后台做出处理后返回给前台

cookie和session区别

session是区别于数据库存在的一种服务器临时存储技术, 它主要存储一些无需持久化的数据, 比如临时的登录状态信息等 cookie是存在于浏览器上的一种浏览器本地存储的方式, 同域名下的cookie不同标签页可以共享, 默认过期时间是浏览器关闭时, 而且在进行http请求时, 会自动带上浏览器全部的cookie发给后台, 后台也可以获取cookie, 设置可以在响应时, 想浏览器中设置cookie。

解决跨域

当ajax请求所在的域名或者接口和请求目标的域名或者接口有一个不同,即发生跨域

解决
  1. 如果可以让后台改码,可以让后台开启跨域支持/使用jsonp处理
  2. cors设置set.heaader
  3. webpack设置跨域

为什么进行模块化

  1. 是目前前端的开发趋势
  2. 有更好的维护性,可复用性等好处

模块化和组件化的区别

  1. 组件化让一些小功能通用性和可复用性来抽象组件
  2. 组件化更多的关注UI部分,比如用户看到的弹出框,页脚,确认按钮等,这些组件可以组合成新的组件,又可以和其他组件组合组合成新的组件
  3. 一些小模块的复用

  1. 模块化是按照业务逻辑划分大模块
  2. 模块化侧重于数据的封装,一组相关的组件定义成一个模块,一个json对象可以是一个模块

AMD 和 CMD

AMD 依赖前置 CMD 就近依赖

常见的web优化有哪些?

  1. 减少代码重复
  2. 压缩 css,js
  3. 减少图片大小数量
  4. 减少http请求,合理设置缓存
  5. CDN加速
  6. 反向代理
  7. js减少DOM操作,编码使用eval和function,减少作用域链查找

koa与express的区别?该如何选择?

websocket是什么

他是html5新增的协议,建立浏览器和服务器之间不受限制的双向通道

websocket的优点:
  1. 持双向通信,实时性更强。
  2. 减少通信量,只要建立起websocket连接,就一直保持连接,在此期间可以不断的传送消息,直到关闭请求。
  3. 节约带宽。

为什么要进行前后端分离?

  1. 提升开发效率,因为可以前后端并行开发,而不是像以前的强依赖
  2. 可以实现真正的前后端解耦(前端可以根据用户不同时期的体验需求迅速改版,后端对此毫无压力。同理,后端进行的业务逻辑升级,数据持久方案变更,只要不影响到接口,前端可以毫不知情。)、增加代码的维护性及易读性
  3. 前后端开发人员的职责更加专注:前端倾向于呈现,着重处理用户体验相关的问题;后端则倾向于业务逻辑、数据处理和持久化等。