您现在的位置是:主页 > news > 网页设计分类/seo技术外包
网页设计分类/seo技术外包
admin2025/6/18 8:52:42【news】
简介网页设计分类,seo技术外包,做地方门户网站,重庆网站推广策划方案Nodejs学习笔记(三)--->利用HTTP模块 URl模块 Path模块 Fs模块创建一个静态WEB服务器第一步第二步第三步第四步第一步 app.js const http require(http); const fs require(fs); const commonrequire(./module/common.js); const pathrequire(pat…
网页设计分类,seo技术外包,做地方门户网站,重庆网站推广策划方案Nodejs学习笔记(三)--->利用HTTP模块 URl模块 Path模块 Fs模块创建一个静态WEB服务器第一步第二步第三步第四步第一步
app.js
const http require(http);
const fs require(fs);
const commonrequire(./module/common.js);
const pathrequire(pat…
Nodejs学习笔记(三)--->利用HTTP模块 URl模块 Path模块 Fs模块创建一个静态WEB服务器
- 第一步
- 第二步
- 第三步
- 第四步
第一步
app.js
const http = require('http');
const fs = require('fs');
const common=require('./module/common.js');
const path=require('path');
const url=require('url');
http.createServer(function (req, res) {//1、获取地址let pathname=url.parse(req.url).pathname; //如果路径为'/',则让其跳转到index.html pathname=pathname=='/'?'/index.html':pathname;//可以获取后缀名path.extname() let extname=path.extname(pathname);//2、通过fs模块读取文件if(pathname!='/favicon.ico'){fs.readFile('./static'+pathname,(err,data)=>{if(err){ res.writeHead(404, {'Content-Type': 'text/html;charset="utf-8"'}); res.end('404这个页面不存在'); }let mime=common.getMime(extname);res.writeHead(200, {'Content-Type': ''+mime+';charset="utf-8"'}); res.end(data); })}
}).listen(3000);
console.log('Server running at http://127.0.0.1:3000/');
common.js
//定义一个函数,使其写入头的时候,针对不同文件,添加不同的Content-Type
exports.getMime = function (extname) {switch (extname) {case '.html':return 'text/html';case '.css':return 'text/css';case '.js':return 'text/javascript';default:return 'text/html';}
}
第二步
在上面的基础上对common.js做改造,以使其适用更对的文件类型
const fs = require('fs');exports.getFileMime = function (extname) {
//注意,fs模块是异步的,所以外部想获取异步里的数据,不能直接获取,需封装成Promise,然后利用async和await让其变成同步return new Promise((resolve, reject) => {//mime.json是一个包含许多文件类型的json文件fs.readFile('./data/mime.json', (err, data) => {if (err) {console.log(err);reject(err);return;}let mimeObj = JSON.parse(data.toString());// console.log(mimeObj[extname]);resolve(mimeObj[extname]);})})
}
app.js
const http = require('http');
const fs = require('fs');
const common=require('./module/common.js');
const path=require('path');
const url=require('url');http.createServer(function (req, res) {//1、获取地址let pathname=url.parse(req.url).pathname; pathname=pathname=='/'?'/index.html':pathname; let extname=path.extname(pathname);//2、通过fs模块读取文件if(pathname!='/favicon.ico'){fs.readFile('./static'+pathname,async (err,data)=>{if(err){ res.writeHead(404, {'Content-Type': 'text/html;charset="utf-8"'}); res.end('404这个页面不存在'); }let mime=await common.getFileMime(extname);res.writeHead(200, {'Content-Type': ''+mime+';charset="utf-8"'}); res.end(data); })} }).listen(3000);console.log('Server running at http://127.0.0.1:3000/');
第三步
针对第二步还可以进一步改进,利用readFileSync就可以实现异步变同步,使用了readFileSync,就不需要封装成Promise了
common.js
exports.getFileMime = function (extname) {var data=fs.readFileSync('./data/mime.json'); //同步方法let mimeObj=JSON.parse(data.toString()); return mimeObj[extname];
}
app.js
const http = require('http');
const fs = require('fs');
const common=require('./module/common.js');
const path=require('path');
const url=require('url');http.createServer(function (req, res) {//1、获取地址let pathname=url.parse(req.url).pathname; pathname=pathname=='/'?'/index.html':pathname; let extname=path.extname(pathname);//2、通过fs模块读取文件if(pathname!='/favicon.ico'){fs.readFile('./static'+pathname,(err,data)=>{if(err){ res.writeHead(404, {'Content-Type': 'text/html;charset="utf-8"'}); res.end('404这个页面不存在'); }let mime=common.getFileMime(extname);res.writeHead(200, {'Content-Type': ''+mime+';charset="utf-8"'}); res.end(data); })}
}).listen(3000);
console.log('Server running at http://127.0.0.1:3000/');
第四步
在第三步的基础上,封装静态WEB服务、 路由
将common.js重新命名为routers.js
routers.js
const fs = require('fs')
const path = require('path')
const url = require('url')let getFileMime = async function (extname) {return new Promise((resolve, reject) => {fs.readFile('./data/mime.json', (err, data) => {if (err) {console.log(err)reject(err)return}let mimeObj = JSON.parse(data.toString())resolve(mimeObj[extname])})})
}exports.static = async function (req, res, staticPath) {let pathname = url.parse(req.url).pathnamepathname = pathname == '/' ? '/index.html' : pathnamelet extname = path.extname(pathname)if (pathname !== '/favicon.ico') {try {let data = fs.readFileSync('./' + staticPath + pathname);if (data) {let mime = await getFileMime(extname);res.writeHead(200, { 'Content-Type': '' + mime + ';charset="utf-8"' });res.end(data);}} catch (error) {//路由if (!extname) { //如果有请求地址有后缀名的话让静态web服务去处理 if (pathname == '/login') {res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("执行登录");} else if (pathname == '/register') {res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("执行注册");} else if (pathname == '/admin') {res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("处理后的业务逻辑");} else {res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("404");}}}}
}
app.js
const http = require('http')
const routes = require('./module/routers.js')http.createServer(function (req, res) {routes.static(req, res, 'static')}).listen(8081);console.log('Server running at http://127.0.0.1:8081/');