三、Node模块
1.使用步骤
-
下包(第三方才需要)
-
导包
-
用包
英文文档官网:https://nodejs.org/en/
中文文档官网: http://nodejs.cn/
2.内置模块包
1.fs模块
读取文件
const fs = require('fs'); //引入内置的fs模块
//读文件 readFile 有三个参数
//第一个参数: 要读取文件的路径
//第二个参数: 编码格式
//第三个参数: 回调函数
// 回调函数里也有2个参数
// err 错误信息, 没有错误是null
// data就是读取的内容.
fs.readFile('./etc/sb.txt','utf-8', (err, data) => {
if (err) throw err;
console.log(data);
});
写入文件
const fs = require('fs');
const data = `
望庐山瀑布
日照香炉生紫烟
遥看瀑布挂玉川
飞流直下三千尺
疑是银河落九天
`;
//如果没有这个文件,会创建这个文件.
//如果没有这个文件夹,会报错,不会创建文件夹的.
fs.writeFile('./etc1/2.txt', data, (err) => {
if (err) throw err;
console.log('文件已被保存');
});
删除文件
var fs = require("fs");
console.log("准备删除文件!");
fs.unlink('./input.txt', function(err) {
if (err) {
return console.error(err);
}
console.log("文件删除成功!");
});
2.path
1.问题–相对路径和绝对路径
nodejs 当前工作目录是启动Node的目录,用Node操纵路径时用相对路径可能出错
解决的方法:
1.直接修改相对路径,方法不好
2.使用绝对路径,但是路径写死,在别的机器上不适用,node.js提供了两个全局变量
- __dirname: 总是返回被执行的 js 所在文件夹的绝对路径
- __filename: 总是返回被执行的 js 的绝对路径
此时可以使用__dirname拼接路径
__dirname+'/etc/01.txt'
//如果使用的式\,则需要使用转义符转义\\
当然可以使用nodejs内置的path模块的join方法拼接路径
const path = require('path');
const fullPath = path.join(__dirname,"etc","01.txt");
2.获取用户请求的资源名称
使用join方法进行路径拼接
//req是函数形参,自己定义的
const fullPath = path.join(__dirname,'www',req.url)
3.http
设置静态资源服务器
静态资源服务器的工作流程
//这里就是我们写代码来配置静态资源服务器.
// 导入 fs 模块
const fs = require('fs');
// 导入 http 模块
const http = require('http');
// 导入 path 模块
const path = require('path');
//创建服务器
const server = http.createServer((request,response)=>{
//request请求
//response响应
console.log(request);
//console.log(request.url); //request.url就可以获取到用户请求的静态资源名称.
//根据用户请求的资源拼接一个路径.
const fullPath = path.join(__dirname,'www',request.url);
//读取文件
//嗅探
fs.readFile(fullPath,(err,data)=>{
if(err == null){
response.end(data);
}else {
// response.end('404 not found');
response.end(`
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL ${request.url} was not found on this server.</p>
</body>
</html>
`);
}
});
});
//开启服务器
//第一个参数是端口号
//第二个参数是回调函数,开启成功后执行的代码.
server.listen(8048,()=>{
console.log('success');
});
-
接收用户的请求
-
接收到请求之后,获取请求的url地址
-
把url地址转化为服务器中的一个绝对路径
- 读取文件
- 存在 返回
- 不存在 404
- 读取文件
http.createServer方法
方法说明:
该函数用来创建一个HTTP服务器,并将 requestListener 作为 request 事件的监听函数。
语法
http.createServer([requestListener])
接收参数:
requestListener 请求处理函数,自动添加到 request 事件,函数传递两个参数:
req 请求对象,想知道req有哪些属性,可以查看 “http.request 属性整合”。
res 响应对象 ,收到请求后要做出的响应。想知道res有哪些属性,可以查看 “http.response属性整合”。
例子:
例子中res指定了响应头,响应体内容为node.js,用end结束。
最后调用listen函数,监听3000端口。
var http = require('http');
http.createServer(function(req, res){
res.writeHead(200, {'Content-type' : 'text/html'});
//向请求发送响应头。 状态码是一个 3 位的 HTTP 状态码,如 404。 最后一个参数 headers 是响应头。 可以可选地将用户可读的 statusMessage 作为第二个参数。
//此方法只能在消息上调用一次,并且必须在调用 response.end() 之前调用。
res.write('<h1>Node.js</h1>');
res.end('<p>Hello World</p>');
//此方法向服务器发出信号,表明已发送所有响应头和主体,该服务器应该视为此消息已完成。
//如果指定了 data,则相当于调用 response.write(data, encoding) 之后再调用 response.end(callback)
}).listen(3000);