wordpress宝塔安装环境,做网站程序的都不关注seo,wordpress显示标题和seo标题,视觉设计包括什么Node.js#xff1a;内置模块 Node.jsfs模块读取文件写入文件__dirname path模块路径拼接文件名解析 http模块创建服务 Node.js
传统的JavaScript是运行在浏览器的#xff0c;浏览器就是其运行环境。 浏览器提供了JavaScript的API#xff0c;以及解析JavaScript的解析引擎内置模块 Node.jsfs模块读取文件写入文件__dirname path模块路径拼接文件名解析 http模块创建服务 Node.js
传统的JavaScript是运行在浏览器的浏览器就是其运行环境。 浏览器提供了JavaScript的API以及解析JavaScript的解析引擎常见的解析引擎如下
Chrome 浏览器V8Firefox 浏览器OdinMonkey(奥丁猴)Safri 浏览器JSCoreIE 浏览器Chakra(查克拉)
其中V8引擎的性能最好所以前端程序员最常使用chrome来运行代码。
那么这样一个JavaScript架构可以支持JavaScript成为一款后端语言吗并不可以因为它没有提供后端所需要的API比如文件读写网络请求等等。
为了让JavaScript可以成为一款后端语言完成后端所需要完成的任务就需要为其提供一套其它的运行环境而这个运行环境就是Node.js。 在Node.js中为JavaScript提供了后端所需的API使用V8引擎进行代码解析让JavaScript可以完成后端工作。
但是在Node.js中无法调用浏览器的DOMBOM等API因为这一套运行环境并不提供可见JavaScript的前后端运行环境是分离的。
安装地址
https://nodejs.org/建议下载LTS版本这是稳定版本。这个安装很简单一直点击next就可以了。
安装后输入node -v检查是否安装成功
C:\Users\xxx node -v
v20.18.0安装成功后可以通过vscode执行node代码。
console.log(hello node.js)编写代码后按下F5 执行时其会提示可以使用Node.js进行编译选择Node.js。 此时就可以在控制台看到输出结果了。
也可以通过命令来执行程序
node 执行的文件fs模块
fs是官方提供的操作文件的模块其可以对文件进行读取与写入。
导入模块语法
const fs require(fs)此处的require方法用于导入模块返回值用一个对象接收后续通过该变量使用模块。 读取文件
读取文件使用fs.readFile方法
fs.readFile(path[, options], callback)path读取文件的存放路径options可选参数读取文件时候采用的编码格式一般默认指定 utf8callback回调函数函数内包含两个参数分别拿到读取失败和成功的结果
示例
const fs require(fs)fs.readFile(./files/1.txt, utf8, function(err, dataStr) {console.log(err err)console.log(dataStr dataStr)
})第一行代码导入fs模块随后通过readFile读取文件。
读取成功
err null
dataStr 文件内容读取失败
err Error: ENOENT: no such file or directory
dataStr undefined不论是否读取成功都调用回调函数。如果读取成功err的值是nulldataStr的值是文件内容如果读取失败那么err存储错误信息而dataStr是undefined。
常见的做法是在回调函数中判断err的值如果err为空直接返回错误信息如果没有返回那么后续就进行正常的文件读取操作。
fs.readFile(./files/11.txt, utf8, function(err, dataStr) {if (err) {return console.log(error err.message)}console.log(success dataStr)
})写入文件
写入文件使用fs.writeFile方法
fs.writeFile(path, data[, options], callback)path写入文件的存放路径data要写入的内容options可选参数读取文件时候采用的编码格式一般默认指定 utf8callback回调函数函数内包含一个参数表示错误信息
同样的如果写入成功那么回调函数的第一个参数为null如果写入失败那么第一个参数为错误信息。
示例
const fs require(fs)fs.writeFile(./files/3.txt, hello node.js, function(err) {if (err) {return console.log(error err.message)}console.log(success)
})以上代码完成对./files/3.txt文件的写入写入内容是hello node.js写入完成后判断错误信息是否写入成功。
注意点
writeFile写入时如果文件不存在那么会创建这个文件writeFile写入前会清空被写入的文件原先内容会被覆盖 __dirname
在fs模块中如果使用相对路径那么此时node.js会以执行命令的路径为出发点查找相对路径而不是以被执行的文件为出发点查找相对路径这和其他语言略有点不同。
以下代码为例
fs.readFile(./hello.txt, utf8, function(err, dataStr) {if (err) {return console.log(error err.message)}console.log(success: dataStr)
})在path.js文件中写JavaScript代码在其同级目录下存在一个hello.txt。如果在path.js目录下运行程序那么程序可以正常输出 此时进行路径拼接当前路径 相对路径得到D:\code_web\test\Node\01\hello.txt这是正确的路径输出成功了。
但是如果跳转到别的目录执行代码 此时进行路径拼接当前路径 相对路径得到D:\code_web\test\Node\hello.txt这是错误的路径输出失败了。
可以看出Node.js不适合使用相对路径查找文件但是由于不同主机环境不同绝对路径往往不一样。为此Node.js提供了一个变量__dirname其标识着当前.js文件的所处目录。
在path.js中输出_dirname
console.log(__dirname)此时不论出于哪一个目录都可以成功标识出path.js的所处目录。
所以在fs中使用相对路径时最好通过__dirname 相对路径来查找文件
fs.readFile(__dirname /hello.txt, utf8, function(err, dataStr) {if (err) {return console.log(error err.message)}console.log(success: dataStr)
})这样不论在什么地方运行程序都可以正常检索路径了。 path模块
path也是Node.js的内置模块专门用于处理路径。
导入模块
const path require(path)先前的__dirname /hello.txt操作是不太正规的path模块有专门用于路径拼接的方法。 路径拼接
path.join方法可以将多个路径片段拼接为完整的路径字符串。
语法
path.join(path, [path...])传入多个路径片段path最后返回拼接好的路径。
示例
const pathStr path.join(/a, /b/c, ./d, e)
console.log(pathStr)输出结果
\a\b\c\d\epath.join不是简单的字符串拼接此处的e前面没有/路径分隔符其自动补充上去而./d中./表示当前路径最后被省略掉了。
path.join还会进行路径的推演来缩短路径比如说../表示上级目录那么path.join就会撤销之前的操作
const pathStr path.join(/a, /b/c, ../../, ./d, e)
console.log(pathStr)输出结果
\a\d\e此时/b/c这个路径就被抵消了。
相对路径拼接就可以使用这个方法
path.join(__dirname, /hello.txt)比如有时候相对路径前面会带一个./如果直接进行字符串假发__dirname ./hello.txt此时路径就会错误无法解析。但是使用path.join就会忽略这个./得到正确的路径。 文件名解析
有的时候获取到的文件是以路径的形式出现此时为了解析出具体的文件名就需要进行一定的字符串检索操作比较麻烦。此时可以使用 path.basename方法快速解析出文件名。
path.basename(path[, ext])参数
path文件路径ext扩展文件名
如果直接输入一个路径path.basename会解析出文件名
const path require(path)
const fpath /a/b/c/index.htmlconst fullName path.basename(fpath)
console.log(fullName)输出结果
index.html如果想要得到去掉后缀的文件名此时填入第二个参数去掉后缀
const path require(path)const fpath /a/b/c/index.htmlconst nameWithoutExt path.basename(fpath, .html)
console.log(nameWithoutExt)输出结果
index这样就同时去掉了路径前缀以及文件后缀。
如果需要单独获得文件的扩展名可以使用path.extname方法
path.extname(path)示例
const path require(path)
const fpath /a/b/c/index.htmlconst fext path.extname(fpath)
console.log(fext)输出结果
.htmlhttp模块
http模块是Node.js的内置模块其可以快速创建一个web服务器并对外提供http服务。
导入模块
const http require(http)创建服务
Node.js可以快速创建服务基于createServer方法。
语法
http.createServer()该方法返回一个服务器的对象基于这个对象就可以让本机接收服务请求。
通过绑定request事件就可以让服务器对象接收请求绑定语法类似于JavaScript的DOM事件绑定
server.on(require, callback)第一个参数指定要绑定的事件第二个参数为事件触发后的回调函数。require事件会监听来自外部的请求一旦收到请求就执行回调函数。
最后只需要启动服务器就可以开始接收请求了
server,listen(port, callback)第一个参数是监听的端口号表示该服务使用的端口号。如果服务器启动成功就会调用回调函数。
示例
const http require(http)// 创建 web 服务器实例
const server http.createServer()
// 为服务器实例绑定 request 事件监听客户端的请求
server.on(request, function (req, res) {console.log(收到请求)
})
// 启动服务器
server.listen(8080, function () { console.log(服务启动成功)
})如果运行成功那么此时去浏览器访问127.0.0.1:8080就会触发回调函数输出收到请求。
在绑定事件时函数内有两个参数req和res它们分别代表请求对象和响应对象。
req请求对象包含客户端相关数据与属性
其包含两个关键属性url是客户端请求的地址method是客户端的请求方式。
server.on(request, function (req, res) {console.log(req.url)console.log(req.method)
})用浏览器访问127.0.0.1:8080结果
/
GET用浏览器访问127.0.0.1:8080/index.html结果
/index.html
GETurl拿到的是除去主机地址后具体请求的文件路径。
res请求对象包含服务器相关数据与属性
在先前的所有操作中使用浏览器请求都是得不到结果的因为服务器根本不响应如果想要进行响应就需要res.end 方法。
server.on(request, function (req, res) {res.end(h1hello world!/h1)
})此时再访问浏览器就可以得到一个文本响应 http模块发送的是HTTP响应还可以通过res.setHeader方法指定响应头的内容。
语法
res.setHeader(name, value)name指定要设置的HTTP头的名称value指定要设置的HTTP头的值
最常见的做法是响应一个html文件此时可以设置Content-Type属性来指定文件类型
res.setHeader(Content-Type, text/html; charsetutf-8);此处指定响应的类型为html文件并且编码的字符集为utf-8这样客户端浏览器就知道如何解析这样一个响应。如果不指定utf-8那么网页就无法解析中文。