博客
关于我
Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由
阅读量:792 次
发布时间:2023-02-16

本文共 1892 字,大约阅读时间需要 6 分钟。

服务器页面技术的优点

传统服务器页面技术如jsp,aspx,php 的最大优点就是隔离性非常好,强制解耦,又省去了手工定义路由的麻烦,文件路径就直接表示了路由,对于新手非常友好,反观node.js的框架koa,express等都需要手工定义路由,例如:

const Koa = require('koa')const router = require('koa-router')()const app = new Koa()router.get('/home', async (ctx, next) => {   ctx.response.body = '

Hello,Home Page

'})复制代码

每增加一个接口都需要手工定义一个路由,需要抽离出来一个routers.js专门定义这些路由,频繁改动,甚至有些开发同学图省事就直接在文件里写逻辑代码了。 node.js能否实现页面技术自动路由到对应的js文件呢,答案是肯定的。

Node.js 实现请求路径自动路由

实现步骤如下:

  1. 获取到请求路径
  2. 使用path.resolve查找项目目录中是否有同名的js文件
  3. require引入文件,必须实现一个约定好的方法名以供调用,如onRequest
  4. 调用该文件中指定的方法

/app.js

const http=require("http");const Path=require("path");const Url=require("url");const fs=require("fs");var server=http.createServer(function (req,res){    var relPath=Url.parse(req.url,true).pathname;    var absPath=Path.resolve(__dirname,"."+relPath+".js")    if(fs.existsSync(absPath)){        var pageObj=require(absPath);        if(pageObj.onRequest){            pageObj.onRequest(req,res)        }    }})server.listen(80);复制代码

/home.js

module.exports={    onRequest:function (req,res){        res.end("

Hello,Home Page

"); }}复制代码

node app.js运行后,现在访问:

大功告成!!

如何实现热更新

现在可以愉快的写页面了,再也不用担心路由忘记定义了,但是修改完js文件的代码后,每次都要重启node才生效,传统的页面技术可是刷新一下页面就能运行最新的代码的,这是因为node require导入的文件模块会缓存,要实现这个肯定要祭出fs.watch这个大杀器了,实现步骤如下:

  1. 监控文件变化
  2. 删除模块缓存
  3. 再重新require进来

就是这么简单,代码如下:

app.js

const fs=require("fs");const Path=require("path");fs.watch(__dirname,{   persistent: true,   recursive: true},function(event,filename){   if (event === "change") {       let fullName=Path.resolve(__dirname,filename);       if(Path.extname(fullName)==".js"){         if (require.cache[fullName]) {           require.cache[fullName] = null;;         }         require(fullName);       }   }});复制代码

Node.js 服务器页面开发框架推荐

根据本文思路,我已经实现了一个相对比较完备的Node.js 开发框架webcontext,并实现了请求上下文封装、静态文件服务、反向代理、数据库访问,sesison存取、日志记录等web应用服务器必备功能 ,如果喜欢,求star

传送门:

转载于:https://juejin.im/post/5ccf00eae51d453b7f0a0d44

你可能感兴趣的文章
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:从头开始的文本矢量化方法
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>