nodejs
时间:2021-02-22 23:27:03
收藏:0
阅读:42
nodejs的简介
nodejs是一个软件,这个软件本质是浏览器内核中的js引擎 - 谷歌浏览器中的js引擎 v8
js引擎是用来解析js代码的,浏览器中之所以能运行js代码,都是这个js引擎可以解析js代码
nodejs这个软件其实就提供了一个js代码脱离浏览器运行的环境,有了nodejs这个软件以后,写的js代码不用依赖html和浏览器就能运行了
既然脱离了浏览器和html,nodejs代码中,就不能操作浏览器和文档了,nodejs的代码中没有window和document
nodejs软件安装好之后,没有快捷方式,不需要双击运行这个软件,nodejs软件怎么运行?在命令行中使用命令来运行。
命令行中没有代码,只有命令。
命令的学习
命令行的打开方式:
1.通过开始菜单,输入cmd
2.win+r打开运行,输入cmd,敲回车
3.可以在任意一个文件夹中,按住 shift键 + 鼠标右键 ----- 在此处打开命令窗口
4.在一个文件夹路径中输入cmd敲回车
5.借助vscode编辑器 - 在左侧的资源管理中,点击右键(快捷键:ctrl+`) --- 在终端中打开(点击关闭面板按钮不能彻底关闭,需要点击删除按钮)
注意事项:win7怎么打开都无所谓,win10对于权限要求比较高,建议大家使用开始菜单,使用管理员身份运行
切换盘符:要从一个根目录下进入到另一个根目录下的某个文件夹是进不去,需要先切换盘符
盘符名: 敲回车 eg:d:
进入某个文件夹:
cd 目标文件夹的路径
回到上一级文件夹:
cd .. eg:cd ..
eg:cd ../xxx
查看当前文件夹下所有文件和文件夹列表:
dir
查看当前文件夹下所有的目录树:
tree
终止当前的命令:
ctrl + c
注意:在命令行中ctrl+c不是复制,ctrl+v也不是粘贴,复制和粘贴都需要点击鼠标右键
清屏:
cls
当前的网卡配置:
ipconfig
当前计算机的配置:
systeminfo
查看某个域名对应的ip地址:
ping 域名
创建文件夹:
md 文件夹名称
创建文件:
type nul> 文件名称
给文件中写入内容:
echo 内容>文件名称
文件重命名:
ren 旧的名字 新的名字
注意事项:在命令行中运行命令,可以使用 tab键 进行自动填充
快速输入以前运行过的命令,上下键表示上一个下一个命令
js中读取文件中的数据
const fs = require(‘fs‘); // 引入别的文件:require(被引入的文件路径)
fs其实是nodejs自己内部封装的一个文件,fs.js - nodejs运行的所有文件都是js文件,所以后缀可省略的,fs是系统提供的,所以不需要加具体的路径 —— 异步的读取文件
fs.readFile(‘./1.txt‘, ‘utf-8‘, (err, data) => { console.log(err); // 如果读取成功,err就是null,如果读取失败了,err就是一个错误信息 if (err) throw err; // 读取文件中的数据,默认读取出来的是一个文件流(二进制的数据流) - 显示的时候,使用16进制来描述2进制的数据 - buffer console.log(data); // console.log(data.toString()); }); console.log(11111111111111);
同步读取文件
var data = fs.readFileSync(‘./3.txt‘,‘utf-8‘) console.log(data);
写入文件
const fs = require(‘fs‘) //用nodejs运行js前面都要加入
注意:nodejs、vue、 .... 在这些框架中,尽量使用es6的语法
const fs = require(‘fs‘) // 如果文件不存在,会自动创建 // 覆盖写入 // 异步写入 fs.writeFile(‘3.txt‘,‘a‘,err=>{ if(err){ console.log("写入失败了,错误是:"+err); return; } console.log("写入成功"); }) console.log(2222222222);
同步写入
const fs = require(‘fs‘) fs.writeFileSync(‘1.txt‘,‘aabbcc‘) console.log("写入成功");
自定义模板
nodejs系统内部不会把所有功能都给封装好,为了更加灵活的适用项目中的需求,需要自己定义模块
导出
在nodejs中,每个文件默认有一个隐藏的对象,叫module,这个对象的作用就是导出数据 - 有一个属性叫exports,开辟的这个空间用来导出数据 - 共享数据
module.exports = 对象
nodejs为了方便开发者导出数据,内部做了一个操作:const exports = module.exports
let obj = { name:"张三", age:12 } let arr = [‘a‘,‘b‘,‘c‘]; // 导出数据 module.exports = { obj:obj, arr } // exports.obj = obj // exports.arr = arr // 将原来exports的内存地址给改了,导出的动能由module.exports提供 - 错误写法 // exports = { // obj,arr // }
导入
require(自定义的路径)
导入自定义文件的时候,./是不能省略的,因为导入系统提供的文件的时候,是不需要路径
后缀可以省略
// 在这个文件中使用 8-导出.js 文件中定义的数据 // 导入 - require() // 不能省略./ const o = require(‘./8-导出‘) console.log(o);
总结:
因为系统不会提供所有功能,所以需要自定义功能文件
自定义的文件,不能随便使用,需要导出,别的文件才能使用
module.exports = {}
exports.键 = 值
别的文件需要导入才能使用:
require(文件路径) - ./不能省略
http服务器
// 导入内置的http模块 const http = require(‘http‘) // 创建服务器 const server = http.createServer(function(request,response){ // request - 当前这次请求 // 请求有一个属性url - 获取请求的路径 // console.log(request.url); let url = request.url; // response - 给客户端做响应的 // 响应的end方法 - 响应数据的 // response.end(‘ok‘) // 响应的setHeader方法,用来设置响应头 // response.setHeader(‘content-type‘,‘text/html;charset=utf8‘) // 响应的writeHead方法,可以用来设置响应状态码、状态描述和响应头 response.writeHead(201,‘request is ok‘,{ ‘content-type‘:‘text/html;charset=utf8‘ }) // response.end(‘有客户端请求来了,这是我做的响应‘) // response.end(123456) // 错误写法,响应的数据必须是string或buffer不能是其他类型 response.end(url) }) // 监听端口 - 可以有第二个参数,是一个回调函数 - 端口监听好以后,执行的一个函数 server.listen(8848,()=>{ console.log("服务器已经启动了,请访问:http://localhost:8848/"); })
服务器响应解析html、css和js案例
// 创建一个服务器,在响应的时候,根据请求的路径,来响应不同的内容 // 请求路径:/login - 响应login.html // 请求路径:/index - 响应index.html // 引入fs,准备读取文件 const fs = require(‘fs‘) require(‘http‘).createServer((req,res)=>{ // res.end(req.url) // 判断请求路径,响应不同的内容 if(req.url === ‘/login‘){ // 响应login.html文件 // 读取login.html文件,响应出去 let data = fs.readFileSync(‘./work/login.html‘) // buffer res.end(data) }else if(req.url === ‘/index‘){ // 读取index.html 并响应出去 let data = fs.readFileSync(‘./work/index.html‘) res.end(data) }else if(req.url === ‘/css/global.css‘){ let data = fs.readFileSync(‘./work/css/global.css‘) res.end(data) }else if(req.url === ‘/css/index.css‘){ let data = fs.readFileSync(‘./work/css/index.css‘) res.end(data) }else if(req.url.includes(‘img‘)){ // 判断请求路径中包含 img let data = fs.readFileSync(‘./work‘+req.url) res.end(data) }else if(req.url.includes(‘js‘)){ let data = fs.readFileSync(‘./work‘+req.url) res.end(data) }else{ res.end(‘ok‘) } }).listen(9527)
简便写法
// 创建一个服务器,在响应的时候,根据请求的路径,来响应不同的内容 // 请求路径:/html/login.html - 响应login.html // 请求路径:/html/index.html - 响应index.html // 引入fs,准备读取文件 const fs = require(‘fs‘) require(‘http‘).createServer((req,res)=>{ // 响应html - 路径中要包含html才行 if(req.url.includes(‘html‘)){ // 读取文件的时候,路径中多了 /html - 去掉 let path = req.url.replace(‘/html‘,‘‘) let data = fs.readFileSync(‘./work‘ + path) res.end(data) }else if(req.url.match(/\/img|\/js|\/css/)){ // /css、/js、/img 整体处理 let data = fs.readFileSync(‘./work‘ + req.url) res.end(data) }else if(req.url.includes(‘/api‘)){ // 发送ajax都使用/api/xxxx res.end(‘login接口‘) // 响应数据 }else{ res.end(‘ok‘) } }).listen(9527)
npm
1.利用nodejs内置的模块文件
2.自定义模块文件
3.第三方模块 - 别人写好的功能文件,我要使用 - 下载,然后导入使用
nodejs为了方便下载别人写好的文件,专门提供了一个下载工具 npm
npm下载工具是nodejs自带的一个工具,只要安装好nodejs吗,就有npm
测试npm是否存在,在命令行执行命令:npm -v 只要能得到版本号,就表示npm存在能用
只需要知道模块的名称就ok
npm能下载写什么?js的库、js的插件、js的框架 ....
下载命令:
npm install 模块名称 - 默认下载的是最新版本
简化命令:npm i 模块名称
下载指定版本: npm i 模块名称@版本号 (版本号:可以是一个大版本号,也可以是完整的带有小版本好的)
卸载命令:
npm uninstall 模块名称
项目细节注意:
项目上线,本来是需要将项目站点中所有的文件都上传到服务器才ok,但是node_modules文件夹,里面的文件层级比较深,琐碎的文件比较多 - 造成一个不好影响,文件在上传过程中,容易引起文件错误,导致上传失败,就会影响项目的运行
// npm提供了一个解决方案,原理:下载模块的时候,使用一个文件记录起来,等到上线的时候,不上传node_modules文件夹,上传记录的这个文件,然后到服务器中,再去根据记录号的模块,重新下载
// 记录模块的文件,是指定的:名字必须叫:package.json - 按照一定的规律存储
// 初始化命令:npm init - 生成指定package.json文件 - 这个命令一定要在下载模块之前执行
// 可以简化这个命令: npm init -y 不用输入了,所有的内容都使用默认的就好 - 这个命令不能在中文文件夹下执行
// 下载模块,他会把所有下载的这些模块都记录起来
// 将项目文件和这个文件上传到服务器 - 忽略node_modules
// 在服务器中执行安装所有记录好的模块:npm i
总结:
在上传项目的时候,不上传node_modules,文件层级深,多,容易造成文件错误,上传失败,项目无法正常运行
// npm init -y 初始化 - 生产了一个package.json的文件
// 下载模块 - 把下载过的模块都记录在这个文件中
// 项目做好了要上线,就把项目文件和package.json文件上传到服务器,在服务器中执行命令:npm i 就能把记录好的所有模块都下载好
nrm
// 管理下载地址的工具:nrm
// npm默认的下载地址在国外 - 很慢
// 需要将下载地址切换到国内
// nrm就是用来做这个操作
// 下载安装nrm这个工具:使用npm就能行
// npm i nrm --global - 全局安装(这个工具在计算机的任何一个地方都可以使用)
// 简写:npm i nrm -g
// 测试是否能用:nrm --version 有版本号就说明下载成功了,能用了
原文:https://www.cnblogs.com/mrxiachongyu/p/14432921.html
评论(0)