概括:
node.js可以通过http模块,搭建一个小的服务器,使其他人可以访问自己的网络(局域网内)
如何搭建:
1.简单搭建一下服务器
//1、引入需要的模块
var http=require("http");
var url=require("url");
var fs=require("fs");
//2、根据提供的API创建服务器应用
var app=http.createServer();
//3、为其设置监听的端口号(80是默认的端口号,开启服务器后直接输入127.0.0.1即可访问
//其他端口号则需要在后面补充,例如:172.0.0.1:8000)
app.listen(80);
此时运行,已经可以访问,但是没有响应页面,需要添加监听事件,对其请求做出对应的响应
2.添加监听事件
app.on("request",(req,res)=>{
//req:request 前端发来的请求,req的url属性就是前端传来的路由和请求消息,搭配url模块更容易获取信息。
var objUrl=url.parse(req.url,true);
var router=objUrl.pathname;
if (router == "/" || router == "/index.html") {
console.log("有人请求了首页");
// 当请求首页时候,需要将首页的html文件响应出去,这就需要用到fs模块
fs.readFile("./public/index.html", (err, buf) => {
//res:response,响应,后端回答的才叫响应,而,这个res对象,会有一个方法叫做req.end(str/buf);可以进行响应
// 将这个读取的这个网页响应出去
res.end(buf)
console.log("响应完成");
})
}
})
在这个js文件里右键点击run code,或者点击小三角启动服务器(上篇文章提到过)
在浏览器对自己的服务器发起请求,看效果
输入127.0.0.1或者127.0.0.1/index.html,都可以,也可以将127.0.0.1换成自己的IP地址(cmd输入ipconfig可以查看)如果listen设置的不是80,记得在后面添加对应的端口号
页面加载中,且加载不出来
查看打印结果(没有报错,没啥问题)
接下来添加样式文件(css,js,png,mp4,.......)的响应,让页面能完全加载出来
app.on("request",(req,res)=>{
//req:request 前端发来的请求,req的url属性就是前端传来的路由和请求消息,搭配url模块更容易获取信息。
var objUrl=url.parse(req.url,true);
var router=objUrl.pathname;
if (router == "/" || router == "/index.html") {
console.log(router);
console.log("有人请求了首页");
// 当请求首页时候,需要将首页的html文件响应出去,这就需要用到fs模块
fs.readFile("./public/index.html", (err, buf) => {
//res:response,响应,后端回答的才叫响应,而,这个res对象,会有一个方法叫做req.end(str/buf);可以进行响应
// 将这个读取的这个网页响应出去
res.end(buf)
console.log("响应完成");
})
}
//对样式文件进行判断,这里使用正则进行判断,可以判断多个文件
//router.match,对router进行查询,如果存在,就返回对应的值,不存在就返回空
//当路由router的值存在正则中的一种,返回不是null,则进入条件
else if (router.match(/css|js|png|gif|jpg|woff|woff2|webp|jpeg/) != null) {
console.log(router);
//小技巧:每一种请求写一条响应过于麻烦,直接拼接字符串,将router拼接在后面,每次请求就响应对应的
fs.readFile("./public" + router, (err, buf) => {
res.end(buf)
console.log("响应完成");
})
}
})
访问自己的服务器,这次加载成功
打印结果(没有报错,就是没事,为什么不是一个路由接一句响应完成,js是异步处理,快)
此时首页已经完成了,但是页面中有许多页面跳转,每次跳转都是一次请求,需要将其他页面的请求也写入响应才算真正完成
上面我们用到了一个小技巧,对响应页面那里,用重复的路径,拼接每一次响应,这里同样可以
以下是整页代码,已经可以实现基础的访问和页面跳转了,是最简单的服务器搭建
//1、引入需要的模块
var http=require("http");
var url=require("url");
var fs=require("fs");
//2、根据提供的API创建服务器应用
var app=http.createServer();
//3、为其设置监听的端口号(80是默认的端口号,开启服务器后直接输入127.0.0.1即可访问
//其他端口号则需要在后面补充,例如:172.0.0.1:8000)
app.listen(80);
//添加监听事件,进行对应的响应
app.on("request",(req,res)=>{
//req:request 前端发来的请求,req的url属性就是前端传来的路由和请求消息,搭配url模块更容易获取信息。
var objUrl=url.parse(req.url,true);
var router=objUrl.pathname;
if (router == "/" || router == "/index.html") {
console.log(router);
console.log("有人请求了首页");
// 当请求首页时候,需要将首页的html文件响应出去,这就需要用到fs模块
fs.readFile("./public/index.html", (err, buf) => {
//res:response,响应,后端回答的才叫响应,而,这个res对象,会有一个方法叫做req.end(str/buf);可以进行响应
// 将这个读取的这个网页响应出去
res.end(buf)
console.log("响应完成");
})
}
//对样式文件进行判断,这里使用正则进行判断,可以判断多个文件
//router.match,对router进行查询,如果存在,就返回对应的值,不存在就返回空
//当路由router的值存在正则中的一种,返回不是null,则进入条件
else if (router.match(/css|js|png|gif|jpg|woff|woff2|webp|jpeg/) != null) {
console.log(router);
//小技巧:每一种请求写一条响应过于麻烦,直接拼接字符串,将router拼接在后面,每次请求就响应对应的
fs.readFile("./public" + router, (err, buf) => {
res.end(buf)
console.log("响应完成");
})
}
else if (router.match(/html/) != null) {
console.log(router);
fs.readFile("./public" + router, (err, buf) => {
//res:response,响应,后端回答的才叫响应,而,这个res对象,会有一个方法叫做req.end(str/buf);可以进行响应
res.end(buf)
})
}
})