Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由

栏目: Node.js · 发布时间: 6年前

内容简介:传统服务器页面技术如jsp,aspx,php 的最大优点就是隔离性非常好,强制解耦,又省去了手工定义路由的麻烦,文件路径就直接表示了路由,对于新手非常友好,反观node.js的框架koa,express等都需要手工定义路由,例如:每增加一个接口都需要手工定义一个路由,需要抽离出来一个routers.js专门定义这些路由,频繁改动,甚至有些开发同学图省事就直接在文件里写逻辑代码了。 node.js能否实现页面技术自动路由到对应的js文件呢,答案是肯定的。实现步骤如下:

传统服务器页面技术如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 = '<h1>Hello,Home Page</h1>'
})
复制代码

每增加一个接口都需要手工定义一个路由,需要抽离出来一个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("<h1>Hello,Home Page</h1>");
    }
}
复制代码

node app.js运行后,现在访问: http://localhost/home

大功告成!!

Node.js 实现类似于.php,.jsp的服务器页面技术,自动路由

如何实现热更新

现在可以愉快的写页面了,再也不用担心路由忘记定义了,但是修改完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

传送门: github.com/windyfancy/…


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

认知盈余

认知盈余

[美] 克莱·舍基 / 胡泳、哈丽丝 / 中国人民大学出版社 / 2011-12 / 49.80元

“互联网革命最伟大的思考者”克莱•舍基 继《未来是湿的》之后最新力作 看自由时间如何变革世界的未来 如果说《未来是湿的》揭示的是“无组织的组织力量”, 那么《认知盈余》揭示的就是 “无组织的时间力量”。 腾讯董事会主席兼首席执行官马化腾首度亲笔作序倾情推荐 克莱•舍基说,美国人一年花在看电视上的时间大约2 000亿个小时,而这几乎是2 000个维基百科项目一年所需要的......一起来看看 《认知盈余》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具