Node.js是基于Chrome V8引擎的JavaScript运行环境。
如果想要运行JavaScript代码,可以在浏览器中运行,也可以在Node.js中运行,因为node.js本身就是JavaScript的运行环境。如果在浏览器中运行,表示我们在做前端开发,如果在node.js中运行,说明我们在做后端开发。Node.js 是一个开源、跨平台的 JavaScript 运行时环境。
Node.js的下载地址:
node.js运行环境分为两个部分 1. v8引擎2.内置API
Node.js做为一个JavaScript的运行环境,只是提供了基础功能和api,
Express框架 可以快速的构建web应用
Elctron框架 可以构建跨平台的桌面应用
Restify框架 ?可以快速构建api接口项目
读写和操作数据库等
安装包可以先通过下载地址下载下来,点击绿色按钮,下载所需要的版本后,双击安装。
推荐安装Node.js18.16.1长期稳定版 尝鲜版本相当于一个测试版 当新增的一些功能会新增在尝鲜版 如果没有bug才会更新在长期维护版
完成以后验证一下 查看已安装的Node.js的版本号.
先打开dos命令窗口 WIN+R键 输入cmd ?输入node -v(node后面有空格需注意)
打印出来版本号以后 那就证明node已经成功安装.
在node环境中执行js代码.
先建立一个txt文件 在文件中写入js代码 然后修改文件名和扩展名,修改完成后,在文件名所在路径的路径栏中输入CMD回车 弹出dos窗口,运行node a.js?? node加上一个空格加上文件名回车 即可执行js代码.
终端中还有集中快捷键的使用方法
使用tab键可以快速补全文件路径
使用esc键可以快速清空当前已输入的命令
输入cls命令,可以清空终端
fs模块是node.js提供的 用来操作文件的模块,它提供了一系列的方法和属性,用来满足用户对文件的操作需求
1fs.readFile()方法,用来读取指定文件中的内容
2.fs.writeFile()方法,用来向指定的文件中写入内容.
只要是我们安装了node.js fs就已经安装到我们的电脑中了,我们就可以使用了
fs.readFile()方法,可以读取指定文件中的内容 格式fs.readFile(文件路径,编码格式,回调函数)
文件路径是必需参数 指定的是需要读取的文件路径
编码格式是非必须参数 是以什么格式进行解读
回调函数也是必须参数 进行返回结果.
//1.导入fs模块,来操作文件
const fs=require('fs')
//调用fs.readFile()方法读取文件
//参数一是需要读取的文件路径 是必填参数
//参数二是读取文件时用的编码 默认是utf8 可选参数
//参数三是回写调函,拿到读取文件返回的结果 必选参数
fs.readFile('./files/a.txt','utf8',function(err,result){
? ? //打印是否有报错 是否返回成功 ????
? ? console.log(err)
? ? console.log('-------')
? ? console.log(result)
})
如何判断文件是否读取成功
可以判断err对象是否为null 如果成功了 那么err返回null 如果失败了 会返回报错
我们可以使用if来进行回调函数判断
//1.导入fs模块,来操作文件
const fs=require('fs')
//调用fs.readFile()方法读取文件
//参数一是需要读取的文件路径 是必填参数
//参数二是读取文件时用的编码 默认是utf8 可选参数
//参数三是回写调函,拿到读取文件返回的结果 必选参数
fs.readFile('./files/a.txt','utf8',function(err,result){
? ? if(err){
? ? ? ? return console.log('失败'+err.message)
? ? }else{
? ? ? ? return console.log('成功,'+result)
? ? }
})
向文件中写入内容
fs.writeFile()的语法格式
使用fs.writeFile()方法 向文件中写入内容
fs.writeFile(存放文件路径,写入的内容,编码格式,回调函数)
除了编码格式其他的都是必须参数
//引用fs模块
fs=require('fs');
//使用fs写入模块
//如果填写的路径没有这个文件 会进行自动创建写入。
fs.writeFile('./files/b.txt','我要测试写入','utf8',function(err,results){
?//使用if判断条件是否报错 然后进行返回结果
? ? if(err){
? ? ? ? console.log("写入失败"+err.message)
? ? }
? ? console.log("写入成功")
})
Path路径模块
Path路径模块是nodejs提供 用来处理路径的模块
在使用过程中,需要引用出来path模块 供后续使用
路径的拼接可以使用path.join()方法 来拼接出完整的路径字符串
使用的方式为:const path=path.join(‘路径1’,‘路径2’)
const path=require('path');
const fs=require('fs');
// 注意:../用来返回上一层路径 会抵消一层路径
const paths=path.join('/a','/d','../','/e')
console.log(paths);
// __dirname代表当前js文件所在的文件所在路径
// 使用path.join进行拼接后面文件路径 而达到读取文件的一个效果
fs.readFile(path.join(__dirname,'/files/a.txt'),'utf8',function(err,results){
? ? if(err){
? ? ? ? return console.log(err.message)
? ? }
? ? console.log(results)
})
如何获取路径的文件名
Path.basename()的说明和用法
使用path.basename()方法,可以获得文件的名称
Path.basename(参数1,参数2)
参数1表示路径 必须项
参数2是剔除项,可进行选择
// 声明一个模块
const path=require('path');
// 拿到一个路径
const name='D:/code/files/a.txt';
// 使用path.basename来获取到文件名称
const path1=path.basename(name);
console.log("path1"+"="+path1);
const path2=path.basename(name,'.txt');
console.log("path2"+"="+path2)
客户端和服务器的区别
可以解释为给客户使用的、消费端称为客户端,生产方对客户端提供服务的称为服务端。
服务器相关内容
首先我们需要了解IP地址
Ip地址就相当于每个计算机的身份证号一样 我们通过IP地址找到对应的计算机,才能够与其建立连接通信。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),
在软件开发过程中,为了方便测试 我们自己的电脑是客户端也是服务端 我们自己的本地电脑是127.0.0.1 这个ip地址只是给自己使用 其他人使用的话会访问不到。
域名和域名服务器的区别
由于ip地址相比域名而言,不方便记忆,比如说百度 我们只要输入www.baidu.com就可以访问百度提供的服务,而不需要再去访问百度的ip地址。有了域名,会使我们在使用软件时更加方便。而域名服务器是将域名转化为ip来进行访问。
在软件开发期间,127.0.0.1对应的域名是localhost,代表的是我们正在使用的这台电脑。访问的结果没有任何差别。
端口号
计算机的端口号就相当于我们日常生活中的门牌号一样,可以让快递或者外卖能够准确的送到。当客户端访问到服务器的资源时,我们可以通过端口号来准确的访问到我们需要的资源来进行处理。
端口号的注意事项:1.端口号不可以几个服务同时使用,这样回导致端口占用,会影响到我们软件系统的正常运行。如果访问网站时,80端口是默认端口,使用这个端口时,可以进行省略,其他端口不可省略。
使用node来创建web服务器
// 导入http模块
const http=require('http');
// 创建一个服务器实例对象
const server=http.createServer();
// 为服务器实例绑定request事件 监听客户端的请求。
server.on('request',function(req,res){
? ? console.log("为服务器实例绑定request事件 监听客户端的请求")
})
server.listen(80,function(){
? ? console.log("服务启动成功 请访问http://127.0.0.1")
})
req请求对象:只要客户端发送了请求 就会调用server.on()为服务器绑定的事件。
// 导入http模块
const http = require('http');
// 创建一个服务器实例对象
const server = http.createServer();
// 为服务器实例绑定request事件 监听客户端的请求。
server.on('request', function (req, res) {
? ? // req.url是客户端请求的url地址
? ? const url = req.url
? ? // ?req.method是客户端请求的method类型 ?
? ? const method = req.method
const serv=(`请求的地址是${url},请求的类型是${method}`)
console.log(serv);
})
server.listen(80, function () {
? ? console.log("服务启动成功 请访问http://127.0.0.1")
})
后面我们可以借助postman或者其他的接口调用工具进行发起请求。就会返回一个
请求内容。
Res响应对象
在服务器的请求事件处理函数过程中 如果想要访问一些数据或者属性 可以采用下面的方式
// 导入http模块
const http = require('http');
// 创建一个服务器实例对象
const server = http.createServer();
// 为服务器实例绑定request事件 监听客户端的请求。
server.on('request', function (req, res) {
? ? // req.url是客户端请求的url地址
? ? const url = req.url
? ? // ?req.method是客户端请求的method类型 ?
? ? const method = req.method
? ? const serv = (`请求的地址是${url},请求的类型是${method}`)
? ? console.log(serv);
? ? res.end('结束')
})
server.listen(80, function () {
? ? console.log("服务启动成功 请访问http://127.0.0.1")
})
在使用res.end结束这次请求时,如果是中文可能会出现乱码的情况,为了解决这个问题 我们需要设置一个格式,来保证程序可以正常显示。
使用的是res.setHeader方法
// 导入http模块
const http = require('http');
// 创建一个服务器实例对象
const server = http.createServer();
// 为服务器实例绑定request事件 监听客户端的请求。
server.on('request', function (req, res) {
? ? // req.url是客户端请求的url地址
? ? const url = req.url
? ? // ?req.method是客户端请求的method类型 ?
? ? const method = req.method
? ? const serv = (`请求的地址是${url},请求的类型是${method}`)
? ? console.log(serv);
? ? res.setHeader('Content-Type','text/html;charset=utf-8')
? ? res.end('结束')
})
server.listen(80, function () {
? ? console.log("服务启动成功 请访问http://127.0.0.1")
})
向外共享模块作用域中的成员
module.exports向外面共享出去
下面为主js文件进行引用共享模块的内容写法
// 在外界使用require导入一个自定义模块的时候,得到的就是module.exports所指向的成员
const m =require('./7.自定义模块');
console.log(m)
下面是自定义模块的模块内容
// 在一个自定义模块中,默认情况下module.exports={对象}
module.exports.name='王五'
// 向module.exports对象挂一个方法
module.exports.say=function(){
? ? console.log('OK完成')
}
module.exports.age=18
得到的结果为:
PS D:\code> node .\6.共享出去的moduleexports.js
{ name: '王五', say: [Function (anonymous)], age: 18 }
共享模块时需要注意的是 永远以module.exports指向的对象为准。
在使用module.exports时,由于module.exports写起来不是很好写,为了简化,我们通常会使用exports对象 直接进行共享,但是最后还是要以module.exports指向的对象为准。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?以上内容均为学习、成长、分享,如果不足之处还请谅解
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?江南小橙子