当前位置: 首页 > 后端技术 > Node.js

Node.js教程(一)基本概念和基本用法

时间:2023-04-03 14:44:10 Node.js

没有题目,也说不上来学习的原因,就是在学习计划里。它是什么?我在学习JavaScript的时候,是在浏览器中看输出和结果,所以浏览器是JavaScript运行环境之一。Node.js是JavaScript的另一个运行时环境。基于ChromeV8引擎,开源跨平台,允许JavaScript在浏览器外执行。Node.js可用于开发服务器端应用程序。我们现在安装Node.js,Node.js的下载地址:https://nodejs.org/en/。下载后,一路next,next就行了。然后打开命令行输入node-v,会出现下图表示安装成功:表示安装成功。HelloWorld,如何在浏览器外运行JavaScript?首先你需要一个js文件,然后在终端中执行nodejs文件名,如下图所示:Whatelsecanyoudoforus?Node.js能帮到我们什么,我们看看官方文档:作为一个异步事件驱动的JavaScript运行时,Node.js旨在构建可扩展的网络应用程序。在下面的“helloworld”示例中,可以同时处理多个连接。每次连接时,都会触发回调,但如果没有工作要做,Node.js就会休眠。Node.js是一个异步事件驱动的JavaScript运行时,为构建高度可扩展的网络应用程序而生,下面的“helloworld”示例,可以并发处理连接,每个连接就绪,回调将被激活。但是如果没有网络连接,node.js就会进入“休眠”状态。我在下面创建了一个app.js,里面的代码如下://importhttpmoduleconsthttp=require('http');//语句1consthostname='127.0.0.1';constport=3000;//搭建一个监听本机3000端口的web服务器//建立连接后,会返回helloworldconstserver=http.createServer((req,res)=>{res.statusCode=200;res.setHeader('Content-Type','text/plain');res.end('HelloWorld');});server.listen(port,hostname,()=>{//eslint-disable-next-lineno-consoleconsole.log(`服务器运行在http://${hostname}:${port}/`);});效果如下:于是node.js启用javaScript开发服务端应用。现在让我们仔细看看app.js的语句一行。语句一表示引入了node.js提供的http模块。NativeJavaScript没有内置网络相关的库,所以node.js提供了很多扩展,让JavaScript拥有与主流后端相同的能力。node.js提供的扩展能力如下:Debugger调试能力模块内置模块和模块化Console与JavaScriptClusterClusterAdd-ons和C/C++Buffer二进制数据类型JavaScript语言本身只有字符串数据类型,没有二进制数据类型。但是在处理TCP流或文件流之类的东西时,必须使用二进制数据。因此,在Node.js中,定义了一个Buffer类,用于创建一个专门用于存储二进制数据的缓冲区。回调回调是异步函数的产物。给定任务完成时的回调函数。回调在node.js中被大量使用。Node的所有API都是以支持回调的方式编写的。Crypto加解密库ErrorHanding错误处理DNS域名解析net网络库global全局成员变量Streaming流式数据文件I/O相关node.js常用内置模块:pathfile路径模块针对不同的操作系统有不同的路径分隔符platforms,path用于屏蔽fsFileSystem文件系统模块对文件的操作。事件模块node.js的核心API是基于事件驱动的。在这个系统中,一些对象(发送器)发出某个事件,我们可以监听这个Event,传入回调函数,监听事件满足,就会触发这个函数的调用。http模块和项目的app.js一样,我们通过require引入了http模块,做了一个小型的http服务器。其实在后端程序员中,模块化是水到渠成的事情,因为服务端开发需要大量的第三方库,所以代码复用也是水到渠成的事情。但这不是JavaScript的情况。起初,JavaScript只是用来编写一些简单的网页脚本,但随着互联网的发展,现在出现了运行大量JavaScript脚本的复杂程序,于是将JavaScript程序拆分成可执行文件。单个模块顺序导入的机制提上了日程。但是即使有了这个迫切的需求,这个愿景也没有来得那么快,所以JavaScript社区自发的推出了模块化库:CommonJS是基于AMD的其他模块系统WebpackBabelNode.js也提供了与CommonJS的模块化能力,所以在Node.js中,我们可以复用别人的代码,这就是npmnpmnpm是NodePackageManager的缩写,是node.js的包管理器,类似于Java中的maven,在安装node.jsnpm的时候会自动附加。然后我们需要对引入第三方库做一些规定,比如包名、版本、描述、开源协议等。在终端执行:npminit。将为当前项目生成package.json。下面是执行npminit生成的package.json:{"name":"helloworld",//项目名称"version":"1.0.0",//version"description":"Thisisanodelearningproject",//Describe"main":"app.js",//入口文件定义了哪些函数是导出供外部使用的,哪些是对外开放的。"scripts":{"dev":"nodehelloWorld.js"},"author":"",//作者"license":"ISC",//开源协议"dependencies":{"express":"^4.18.1"//哪些包依赖}}scripts:npm允许使用package.json文件中的scripts字段定义脚本。我们可以使用noderundev代替nodehelloWorld.js。使用脚本编写一些复杂的脚本。上面我们提到了第三方库,那么第三方库在哪里呢?下面链接是第三方库地址:https://www.npmjs.com/,npm默认搜索这个仓库。这个库放在国外,所以不会很快加载。国内有对应的镜像:https://registry.npm.taobao.org,如何替换默认仓库地址:#找express去https://registry.npm.taobao.org找到npm--registryhttps://registry.npm.taobao.orginstallexpress#永久替换npmconfigsetregistryhttps://registry.npm.taobao.org#使用以下命令判断替换是否完成。npmconfiggetregistry在Node.js中,我们可以使用npm引入第三方库。在终端执行如下命令:npminstallexpress,相当于为我们的项目引入了express框架。安装成功的项目下会多出一个node_modules文件夹,我们引入的第三方库就在这个文件夹中。写到这里可能有同学会问,那我项目很多,一些第三方库是一起导入的,可以全局导入吗?当然。#全局安装express。-g=-glaobl,一般默认安装位置是:在C:\Users\你的用户\AppData\Roaming\npm\node_modulesnpminstallexpress-g#查看全局安装位置npmroot-g#修改默认安装位置npmconfigsetprefix"D:\ProgramFiles\nodejs\node_modules\npm"在VsCode中安装全局包。如果不是以管理员身份运行,会报没有权限。用管理员权限运行不会有这个问题。总结一下node.js=javaScriptRuntime+JavaScriptLibary。node.js为JavaScript提供了模块化和一些库,因此我们可以使用node.js来开发服务器端程序。参考资料Node插件介绍https://zhuanlan.zhihu.com/p/...淘宝npm镜像源设置https://segmentfault.com/a/11...