node常见面试题

什么是node.js?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动(通过事件去驱动一些程序)、非阻塞式 I/O 的模型(异步),让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。使其轻量又高效

nodejs的组成部分?

  • JavaScript有ECMAScript BOM DOM组成

  • node.js 由 ECMAScript 和 Node模块API 组成

  • Node.js 的包管理器 npm,成为世界上最大的开放源代码的生态系统。

  • ECMA: 是一个组织,用来规范js语法的,

 nodejs是javascript的运行环境,浏览器也是javascript的运行环境,两者有什么区别?

  • node是 js 的后端运行环境。

  • 浏览器是 js 的前端运行环境。

  • 浏览器的运行环境 有安全机制的 不能调用底层的接口文件 不能实现创建文件或目录等 浏览器中可以识别dombom对象

  • documet 是dom(文档对象的顶级)、window是 bom对象的顶级。

  • 使用nodejs 可以调用底层接口文件 也可以创建文件或目录等 node环境中没有bom和dom的概念

什么是npm ?

  • npm是一个node的包管理仓库 ,也是一个网站 ,还是一条命令

  • nodeJS中的第三方模块就叫做 包

  • 不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。

  • 注意:Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用。

 Npm 全局下载和本地下载的区别?

 末尾使用 -g 的命令进行全局安装; 全局安装时直接安装在全局的环境中, 只需要安装一次,在全局可以使用这个包
局部安装是安装在当前的项目目录下,只允许在局使用 
像 nrm npm 等这些命令的包,都使用全局安装。 像axios 等一些工具的包都使用局部安装。

注意: 一般命令式的包,一般使用全局安装, 安装一次以后就可以直接用了。向 axios 的一些工具类的包,库文件。就可以使用局部安装  

npm初次操作后的特点?

  • 初次装包完成后,在项目文件夹下多一个叫做 node_modules 的文件夹和 package-lock.jsonpackage.json的配置文件。

  • 注意: 不要手动修改 node_modules 或 package-lock.json 文件中的任何代码,npm 包管理工具会自动维护它们。

  • npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些配置信息。

  • 例如: 项目的名称、版本号、描述等 项目中都用到了哪些包 哪些包只在开发期间会用到 那些包在开发和部署时都需要用到

  • 在项目根目录中,创建一个叫做 package.json 的配置文件,即可用来记录项目中安装了哪些包。从而方便剔除 node_modules 目录之后,在团队成员之间共享项目的源代码。

  • npm 包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建 package.json 这个包管理配置文件: 命令 : npm init -y

  • 上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。

  • 运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到 package.json 中。

 dependencies 与 devDependencies 之间的区别?

  • dependencie 配置当前程序所依赖的其他包。 线上模式所依赖的包管理(生产模式) npm i xxx -S(--save或省略)

  • devDependencie 配置当前程序所依赖的其他包,只会下载模块,而不下载这些模块的 测试和文档框架 开发模式所依赖的包 npm i xxx -D(--save-dev)

注意:

如果某些包只在项目开发阶段会用到,在项目上线之后不会用到;

则建议把这些包记录到 devDependencies 节点中。 与之对应,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到 dependencies 节点中。

 什么是commonjs?

JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器。然而, JavaScript 标准定义的 API 是为了构建基于浏览器的应用程序。并没有制定一个用于更广泛的应用程序 的标准库。CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷。

它的终 极目标就是:提供一个类似 Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序 的阶段。

用 CommonJS API 编写出的应用,不仅可以利用 JavaScript 开发客户端应用,而且 还可以编写以下应用。

服务器端 JavaScript 应用程序。(nodejs) 命令行工具。 •桌面图形界面应用程序。

CommonJS 就是模块化的标准(规范),nodejs 就是 CommonJS(模块化)的实现。

nodejs的模块化的规范是 : commonJs规范

模块化的好处

  • 提高代码的复用性 可维护性

  • 功能独立 便于后期管理和维护

  • 防止全局变量的污染(浏览器中没有模块作用域的概念)

  • 可以实现按需加载

node模块的种类?

1.内置模块 fs http path url

2.自定义模块

3.第三方模块 npm下

 web开发常见概念

网络协议,是计算机网络中进行数据交换而建立的规则,标准,或约定的集合。

2.有七个层级; 应用层的http协议。

超文本传输协议是一个简单的请求-响应协议.

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型 是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

http 请求格式

  • 第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本。 GET说明请求类型为GET , [/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。

  • 第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息 从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等

  • 第三部分:空行,请求头部后面的空行是必须的 即使第四部分的请求数据为空,也必须有空行。

  • 第四部分:请求数据也叫主体,可以添加任意的其他数据。 这个例子的请求数据为空。

 请求方法

  • GET: 用于请求访问已经被URL(统一资源标识符)识别的资源,可以通过URL传参给服务器。

  • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。

  • PUT: 传输文件,报文主体中包含文件内容,保存到对应URL位置。

  • HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URL是否有效。

  • DELETE:删除文件,与PUT方法相反,删除对应URL位置的文件。

  • OPTIONS:查询相应URL支持的HTTP方法。

 http响应

  • 第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。 第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

  • 第二部分:消息报头,用来说明客户端要使用的一些附加信息 第二行和第三行为消息报头, Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

  • 第三部分:空行,消息报头后面的空行是必须的

  • 第四部分:响应正文,服务器返回给客户端的文本信息。 空行后面的html部分为响应正文。

Vue路由和express路由的区别?

  • vue-router 是前端路由

    • 实现单页面应用,是url与组件间的映射关系。页面间的切换时不用发起后端请求的,

    • 默认被切换的组件是被销毁的。

  • experss-router -- 后端的路由 api接口

    • 通过路由地址, 去映射api接口 。

    • 是客户端 需要发起http请求, 传递信息告诉服务器要访问的url, 服务器判断该咋办 。

 jsonp 前端跨域原理

  1. 动态创建一个script 标签

  2. 设置标签的 src 属性值就是 jsonp接口; 末尾添加 callback参数是一个回调函数!

  3. 将动态创建的script标签添加到 body 中去

eg:

 

EJS模板引擎

作用:

EJS是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本。可以说EJS是一个JavaScript库,EJS可以同时运行在客户端和服务器端,客户端安装直接引入文件即可,服务器端用npm包安装

EJS 基础语法

  • 输出标签

    • <%- 识别带有标签的字符串 %> -- (HTML会被浏览器解析 加粗的1)将未转义的值输出到模板中

    • <%= 只能识别字符串 %> -- 输出标签(原文输出HTML标签1) 将值输出到模板中

  • 注释标签 特点: 不执行,不输出。

    • <%# 注释内容 %> -- 不会在编译好的页面中(浏览器)显示。不同于<--! 注释内容 -->

  • 流程控制标签

    • <% %> 逻辑代码被该标签包裹起来,但是涉及的html标签不能被该标签包裹

    • <% for (let i = 0; i < list.length; i++ ) {%> <% } %> -- for 循环

    • <% if(false) {%> ... <% } else { %>.... <% } %> -- 流程控制语句

 EJS特点

)快速编译和渲染

(2)简单的模板标签

(3)自定义标记分隔符

(4)支持文本包含

(5)支持浏览器端和服务器端

(6)模板静态缓存

(7)支持express视图系统

 

超文本传输协议

  • 超文本传输协议(HTTP)的设计目的是保证客户端机器与服务器之间的通信。

  • 在客户端和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

    • GET - 从指定的资源请求数据。(一般用于获取数据)

    • POST - 向指定的资源提交要被处理的数据。(一般用于提交数据)

Express框架

Express 简介

  • Express是一个基于Node.js平台,快速、开放、极简的 web 开发框架; Express框架是后台的 Node

    架,所以和·jQueryzeptoyuibootstrap都不是一个东西。 属于后端框架(类似django)

  • Express在后台的受欢迎的程度类似前端的jQuery,就是企业的事实上的标准。

Express 特点

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建

各种 Web 和移动设备应用。

丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单

express中间件

  • 两个事情(req和res)中间 ,加入一些内容 ,加入的这个内容,可以做一些事情,可以选择走下一条路,使

    用参数next()方法,根据中间件加入的位置不同,叫做不同的中间件。

  • 在 服务器以请求结束中间 其它的对象解析与模块解析的过程 是中间件执行的过程。 客户端发起请求, 客户

    端未开始响应之前做的一些事情。

  • 注意 : 不调用执行 next() 方法, 路由就不会向下执行。 

 中间件的种类

  • 全局中间件

  • 路由级中间件

  • 路由应用级中间件

  • 全局错误处理中间件

静态资源区别与路由请求区别  

静态资源不需要动态的进行逻辑处理,路由需要比对匹配

router模块化

为了方便对路由进行模块化的管理,Express 不建议将路由直接挂载到 app 上,而是推荐将路由抽离为单独的模块。

 

你可能感兴趣的:(node.js,node.js)