ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

nodejs 教程

nodejs 教程 菜鸟教程https://www.runoob.com/nodejs/nodejs-tutorial.htmlnode js 官网https://nodejs.org/en/download/nodejs 官网文档https://nodejs.org/zh-cn/docs/w3school nodejshttps://www.w3cschool.cn/search?wnodejs1、nodejsnodejs 简介Node.js 是一个事件驱动 I/O 服务端的 JavaScript 环境基于 Google 的 V8 引擎V8 引擎执行 Javascript 的速度非常快性能非常好。简单的说Node.js 就是一个 JavaScript 的运行时环境可以让 JavaScript 直接在服务端运行Node.js 让 JavaScript 成为了与 PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。JavaScript 可以在 浏览器(内置js引擎)、nodejs(内置js引擎) 环境运行如果 JavaScript 代码中调用了浏览器提供的 API则必须安装一个浏览器如果 JavaScript 代码中调用了nodejs API则必须安装 nodejs 环境。Node.js 可以说是 JavaScrip 的一种独立于浏览器的运行环境。node.js 特点单线程和事件驱动架构Node.js 使用单线程来处理请求但通过事件驱动和非阻塞 I/O 操作的特性使其可以高效地处理大量并发连接而不会阻塞线程。异步和非阻塞 I/O这使得 Node.js 能够处理高并发的请求非常适合 I/O 密集型应用如文件读取、数据库操作和网络请求。跨平台支持Node.js 可以在 Windows、Linux 和 macOS 等多个操作系统上运行。庞大的生态系统Node.js 拥有一个名为 npmNode Package Manager的生态系统其中有丰富的第三方库和模块可以用来扩展功能和加速开发。使用nvm安装 node可以直接下载 nodejs 的压缩包然后解压即可也可以下载 nodejs 的 exe 执行安装。但是有时候因为不同项目要求不同 Node 版本。所以这里使用 nvm 进行安装。nvm Node Version Manager是Node.js 版本的管理器用来在一台机器安装多个 Node 版本并可进行快速切换。Windows 上的 nvm 并非官方版本官方 nvm 仅支持 macOS/Linux而是由社区维护的nvm-windows仓库https://github.com/nvm-windows/nvmlinux / mac 仓库https://github.com/nvm-sh/nvmnvm 作用本地安装多个 Node.js比如项目 A 用 Node16项目 B 用 Node20不用反复卸载重装。切换全局 node/npm 版本不同版本全局包隔离。zip 绿色版免安装。下载 nvm-noinstall.zip解压到 D:\nvm 在解压目录新建 settings.txt注意不要手动创建 D:\nodejs交给 nvm 自动生成。root: D:\nvmpath: D:\nodejs添加系统环境变量把 %NVM_HOME% 和 %NVM_SYMLINK% 添加到系统 PathNVM_HOMED:\nvmNVM_SYMLINKD:\nodejs配置国内镜像加速下载 node方法 1通过命令设置nvm node_mirror https://npmmirror.com/mirrors/node/nvm npm_mirror https://npmmirror.com/mirrors/npm/方法 2手动修改 nvm 目录下settings.txt追加两行node_mirror: https://npmmirror.com/mirrors/node/npm_mirror: https://npmmirror.com/mirrors/npm/常用命令nvm # 查看帮助 nvm version # 查看nvm本身版本 nvm list available # 或 nvm ls available 查看线上可安装的node版本 nvm install 20.17.0 # 安装指定版本node例如安装 20.17.0 nvm install 18 # 只指定主版本号nvm 会自动安装该系列的最新版 nvm install lts # 安装最新LTS长期支持版 nvm install latest # 安装最新的 Current开发版版本 nvm use 20.17.0 # 使用/切换某个node版本use 会持久写入配置 nvm list # 或 nvm ls 查看本机已安装所有node nvm current # 查看当前正在使用的node nvm use 20.17.0 # 设置某个版本为默认版本 nvm uninstall 18.20.4 # 卸载某个版本需要指定具体版本号 npm cache clean --force每个 Node 版本有独立缓存 nvm alias # 查看所有别名(包括 default) nvm alias default version # 设置默认启动版本。nvm alias default 20.12.0全局 npm 包会安装在对应版本目录下面不同 node 版本全局包互相隔离切换版本后全局包需要重新安装。安装最新 lts 版本 node首先查看可用版本都有哪些安装最新 lts 版本nvm install 24.20.0本地模块、全局模块npm 包分两种本地项目内、全局global。 nvm‑windows 环境下全局包是跟着 Node 版本走的切换 Node 全局包就变了。最佳实践业务库全部本地安装不要 ‑g只有纯命令行工具才使用‑g全局安装优先用npx调用项目内工具减少全局包依赖nvm 切换 node 版本后全局命令工具需要重新npm i -g xxx不要提交node_modules到 git提交package.json、package‑lock.jsonnpm install默认安装 dependencies开发工具加‑D‑‑save‑dev。本地模块最常用本地模块属于项目级别的模块最常用npm install xxx# 等价 npm install xxx --savedependencies业务依赖npm install xxx --save-dev # devDependencies 开发依赖存放位置项目文件夹下node_modules/package.json 记录dependencies业务运行也要用比如lodash、axiosdevDependencies仅开发构建用比如webpack、vite、eslint使用方式代码里面 require /import const _ require(lodash)Node 查找规则先找当前项目node_modules找不到再向上逐级找不会去全局目录找。调用包自带命令npx优先执行项目node_modules/.bin 下面的命令不看全局npx vite优缺点优点是不同项目可以用不同版本互不干扰package.json记录依赖拷贝项目、git clone 后npm install一键恢复。缺点每个项目都会复制一份包磁盘占用大。全局模块 global安装命令npm install -g xxx存放位置nvm 每个 node 版本隔离全局包切换 node 版本全局包要重新装D:\nvm‑noinstall\v20.17.0\node_modules\npm\node_modules\ # 全局模块目录 D:\nvm‑noinstall\v20.17.0\node_modules\npm\bin\ # 全局命令脚本记住规则‑g 只供命令行调用代码引用一律本地安装。全局包设计定位是命令行工具不是给业务代码导入用的。但有 3 种方式可以在代码加载全局包。方式 1不推荐把全局路径加入模块搜索路径NODE_PATH。NODE_PATH是 Node 额外的模块查找目录。获取当前全局模块真实路径npm root -g临时设置环境变量当前终端生效set NODE_PATHD:\nvm-noinstall\v20.17.0\node_modulesnode app.js现在代码可以直接const _ require(lodash) 。如果想要永久生效则系统环境变量新增 NODE_PATH填入上面路径。巨大缺点1. nvm **切换 node 版本全局路径会变NODE_PATH 不会自动更新直接炸**2. 项目依赖脱离 package.json别人拉代码跑不起来3. 版本混乱不同项目无法锁定版本。方式 2代码动态拼接全局绝对路径 require更不推荐// 问题移植性极差换电脑、换 node 版本直接失效。const { execSync } require(child_process);// 获取全局node_modules路径const globalRoot execSync(npm root -g, {encoding:utf8}).trim();// 拼接完整绝对路径加载包const lodash require(${globalRoot}/lodash);方式 3用子进程执行命令。在Node 脚本内部调用全局的 cli 命令不是导入模块而是用子进程执行命令const { spawn } require(child_process);// 在代码里调用全局安装的vue命令const cp spawn(vue, [create,demo], {stdio:inherit});区别require(xxx)调用包的 js 模块源码spawn / exec调用全局包暴露的终端命令。导出当前 node 版本所有全局包清单npm list -g --depth0 global.txt查看全局真实路径npm config get prefix npm root -g使用方式只能终端直接敲命令代码里require()不能直接引用全局包# 全局安装 npm i -g vue/cli # 终端直接调用 vue create myapp重点JS 代码 import/require 不会去全局目录搜索包。即使你全局装了 lodash代码里require(lodash)依然会报错必须在项目本地安装。项目本地模块不加‑g全局模块‑g安装npm install xxxnpm install -g xxx存储位置项目内node_modulesnode 版本目录下的全局 node_modulespackage.json会记录依赖不会写入 package.json代码 import/require✅可以❌不可以命令调用使用npx xxx终端直接敲xxx版本隔离每个项目独立版本跟随当前 node 版本nvm 切换 node 全局包全部消失git 提交node_modules 不要提交提交 package.json和项目无关不进 git设置全局模块的安装路径和缓存目录。这通常是通过在 Node.js 安装目录下创建node_global和node_cache两个文件夹并通过npm config命令设置这两个路径。设置全局模块的安装路径npm config set prefix D:\node-v22.17.1-win-x64\node_global设置缓存目录npm config set cache D:\node-v22.17.1-win-x64\node_cache完成这些配置后使用npm install -g命令安装的全局模块将会被安装到指定的node_global目录中而缓存也会被保存到node_cache目录。使用国内镜像。由于网络原因直接使用 npm 安装模块可能会非常缓慢。因此推荐配置国内镜像如淘宝 NPM 镜像以加快模块的下载速度。也可以通过 npmrc 查看配置设置淘宝 NPM 镜像npm config set registry https://registry.npmmirror.com查看当前使用的镜像npm config get registry配置完成后执行命令如果能够看到相应的版本号则表示安装和环境变量配置成功。查看 Node.js 版本node -v查看 npm 版本npm -vnpm 设置代理设置 http 代理npm config set proxy http://username:passwordproxy-server-url:port设置 https 代理npm config set https-proxy http://username:passwordproxy-server-url:port如果代理服务器不需要用户名和密码只需省略username:password部分。例如如果代理服务器地址为proxy.example.com端口为8080可以这样设置npm config set proxy http://proxy.example.com:8080npm config set https-proxy http://proxy.example.com:8080查看代理npm config get proxynpm config get https-proxy取消代理设置可以使用以下命令npm config delete proxynpm config delete https-proxynpm 常用命令npm list --depth0 # 查看项目本地已装包npm list -g --depth0 # 查看当前node版本的全局包npm uninstall xxx # 卸载本地包npm uninstall -g xxx # 卸载全局包npm root -g # 获取全局模块根目录npx vite # npx执行项目本地命令2、nodejs 教程nodejs 教程https://www.runoob.com/nodejs/nodejs-tutorial.htmlNode.js 安装配置Node.js 创建第一个应用NPM 使用介绍Node.js REPLNode.js 回调函数Node.js 事件循环Node.js EventEmitterNode.js BufferNode.js StreamNode.js 模块系统Node.js 函数Node.js 路由Node.js 全局对象Node.js 常用工具Node.js 文件系统Node.js GET/POST请求Node.js 工具模块Node.js Web 模块Node.js Express 框架Node.js RESTful APINode.js 多进程Node.js JXcore 打包Node.js MySQLNode.js MongoDB3、node.js入门教程视频地址https://www.bilibili.com/video/BV1a34y167AZhttps://blog.csdn.net/m0_46403734/article/details/1247823873.1 初识 node.js浏览器中的 JavaScript 运行环境Node.js 中的 JavaScript 运行环境Node.js 可以做什么Node.js 作为一个 JavaScript 的运行环境仅仅提供了基础的功能和API。然而基于Node.js 提供的这些基础能很多强大 的工具和框架如雨后春笋层出不穷所以学会了Node.js 可以让前端程序员胜任更多的工作和岗位① 基于 Express 框架http://www.expressjs.com.cn/可以快速构建Web 应用② 基于 Electron 框架https://electronjs.org/可以构建跨平台的桌面应用③ 基于 restify框架http://restify.com/可以快速构建API 接口项目④ 读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…Node.js 怎么学浏览器中的 JavaScript 学习路径JavaScript 基础语法 浏览器内置 APIDOM BOM 第三方库jQuery、art-template 等Node.js 的学习路径JavaScript 基础语法 Node.js 内置 API 模块fs、path、http等 第三方 API 模块express、mysql等调试 node js调试 Node.jshttps://node.org.cn/en/learn/getting-started/debugging1. 使用集成开发工具。例如Visual studio、PyCharm、vs code 等。2. 通过 浏览器 调试。Node.js 调试工具 --inspect 和 node-inspect使用 node 的 --inspect 参数进行调试。--inspect 是 Node.js 的命令行选项用于启用 V8 调试器这个调试器是一个内置的调试工具提供了一系列调试功能如断点、堆栈跟踪、变量检查等。同时可以与 Chrome DevTools 集成。执行node --inspect demo.js将启动 demo.js 并在默认的调试端口通常是 9229上开启调试会话。--inspect-brk在脚本的第一行设置断点适用于短时间运行的脚本。node-inspect 是一个命令行调试工具提供了更细粒度的调试控制。安装npm install -g node-inspect 然后执行 node-inspect demo.js 进入调试模式。打开 Chrome 浏览器访问 chrome://inspect 然后在 Remote Target 会看到 demo.js点击 “inspect” 链接一个新的 Chrome DevTools 窗口将会打开并连接到到 demo.js或者安装浏览器插件NIM (Node.js 调试管理工具)会自动监听 --inspect 参数自动打开和关闭Edge DevTools的选项。 只需切换手动/自动设置然后启动调试会话。 DevTools将在单击打开DevTools按钮或指定的超时时间后打开。 如果设置为自动关闭一旦结束调试会话DevTools将自动关闭。安装 nodejs3.2 fs 文件系统模块什么是 fs 文件系统模块读取指定文件中的内容向指定的文件中写入内容fs 模块 --- 路径动态拼接的问题3.3 path 路径模块什么是 path 路径模块路径拼接获取路径中的文件名获取路径中的文件扩展名3.4 http 模块什么是 http 模块进一步理解 http 模块的作用服务器相关的概念创建最基本的 web 服务器基本步骤1. 导入 http 模块2. 创建 web 服务器实例3. 为 服务器实例 绑定 request 事件监听客户端请求4. 启动服务器// 1. 导入 http 模块 const http require(http) // 2. 创建 web 服务器实例 const server http.createServer() // 3. 为服务器实例绑定 request 事件监听客户端的请求 server.on(request, function (req, res) { console.log(Someone visit our web server.) }) // 4. 启动服务器 server.listen(8080, function () { console.log(server running at http://127.0.0.1:8080) })request、response关于中文乱码根据不同的 url 响应不同的 html 内容核心实现步骤1. 获取请求的 URL 地址2. 设置默认的响应内容为 404 Not found3. 判断用户请求是否为 / 或者 /index.html 首页4. 判断用户请求是否为 /about.html 关于页面5. 设置 Content-Type 响应头防止中文乱码6. 使用 res.end() 把内容响应给客户端3.5 Node.js 中的模块化Node.js 中模块的分类加载模块Node.js 中的模块作用域向外共享模块作用域中的成员注意为了防止混乱建议大家不要在同一个模块中同时使用 exports 和 module.exportsNode.js 中的模块化规范4、Node.js web 开发框架 --- Express1.1 Express简介1.2 Express 的基本使用1.3 托管静态资源2. Express 路由2.1 路由的概念2.2 路由的使用3. Express 中间件3.1 中间件的概念3.2 Express 中间件的初体验3.3 中间件的分类3.4 自定义中间件4. 使用 Express 写接口4.1 创建基本的服务器4.2 创建 API 路由模块4.3 编写 GET 接口4.4 编写 POST 接口4.5 CORS 跨域资源共享4.6 JSONP 接口5.数据库与身份认证1. 数据库的基本概念2. 安装并配置 MySQL3. MySQL 的基本使用3.1 使用 MySQL Workbench 管理数据库3.2 使用 SQL 管理数据库3.3 SQL 的 SELECT 语句3.4 SQL 的 INSERT INTO 语句3.5 SQL 的 UPDATE 语句3.6 SQL 的 DELETE 语句3.7 SQL 的 WHERE 子句3.8 SQL 的 AND 和 OR 运算符3.9 SQL 的 ORDER BY 子句3.10 SQL 的 COUNT(*) 函数演示代码如下-- 查询所有数据 select * from users -- 查询指定列数据 -- select username,password from users -- 插入数据 -- insert into users (username,password) values (tony stark,098123) -- select * from users -- 更新用户id4的密码 -- update users set password888888 where id4 -- select * from users -- 更新id2用户密码和状态 -- update users set passwordadmin123,status1 where id2 -- select * from users -- 删除id4用户 -- delete from users where id4 -- select * from users -- 查询限定数据 -- select * from users where status1 -- select * from users where id2 -- and的使用 -- select * from users where status0 and id3 -- or的使用 -- select * from users where status1 or usernamezs -- 按照status升序 -- select * from users order by status -- 按照id降序 -- select * from users order by id desc -- 多重排序 -- select * from users order by status desc,username asc -- 使用count(*) 统计status0的总数 -- select count(*) from users where status0 -- 使用AS起别名 -- select count(*) as total from users where status0123456789101112131415161718192021222324252627282930313233##4. 在项目中操作 MySQL4.1 在项目中操作数据库的步骤4.2 安装与配置 mysql 模块4.3 使用 mysql 模块操作 MySQL 数据库代码实现const mysql require(mysql); const db mysql.createPool({ host: 127.0.0.1, user: root, password: admin123, database: my_db_01 }) // 测试MySQL能否使用 // db.query(select 1,(err,results){ // if(err){ // console.log(err.message); // } // console.log(results); // }); // 查询数据 // const sqlStr select * from users; // db.query(sqlStr, (err, results) { // if (err) { // console.log(err.message); // } // console.log(results); // }); // 插入数据 // const user { // username: Spider-Man, // password: pcc123 // }; // const sqlStr insert into users (username,password) values (?,?); // db.query(sqlStr, [user.username, user.password], (err, result) { // if (err) { // console.log(err.message); // } // if (result.affectedRows 1) { // console.log(插入数据成功); // }; // }) // 插入数据(快捷方式) // const user { // username: Spider-Man2, // password: pcc4321 // }; // const sqlStr insert into users set ?; // db.query(sqlStr, user, (err, result) { // if (err) { // console.log(err.message); // } // if (result.affectedRows 1) { // console.log(插入数据成功); // }; // }) // 更新数据 // const user { // id: 6, // username: aaa, // password: 000 // }; // const sqlStr update users set username?, password? where id?; // db.query(sqlStr, [user.username, user.password,user.id], (err, result) { // if (err) { // console.log(err.message); // } // if (result.affectedRows 1) { // console.log(更新数据成功); // }; // }) // 更新数据(快捷方式) // const user { // id: 6, // username: aaaa, // password: 0000 // }; // const sqlStr update users set ? where id?; // db.query(sqlStr, [user,user.id], (err, result) { // if (err) { // console.log(err.message); // } // if (result.affectedRows 1) { // console.log(更新数据成功); // }; // }) // 删除数据 // const sqlStr delete from users where id?; // db.query(sqlStr, 5, (err, result) { // if (err) { // console.log(err.message); // } // if (result.affectedRows 1) { // console.log(删除数据成功); // }; // }) // 标记删除数据 const sqlStr update users set status? where id?; db.query(sqlStr, [1,6], (err, result) { if (err) { console.log(err.message); } if (result.affectedRows 1) { console.log(标记删除数据成功); }; })1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091105. 前后端的身份认证5.1 Web 开发模式5.2 身份认证5.3 Session 认证机制5.4 在 Express 中使用 Session 认证5.5 JWT 认证机制5.6 在 Express 中使用 JWT5、项目【开发API接口】在线地址http://www.escook.cn:8088/#/mds/1.init
返回列表