node.js挂起所有路由

node.js挂起所有路由

  • 新建一个node项目
    这里我使用的是webstorm创建。启动webstorm,在file—>new—>project创建一个node项目

在这里插入图片描述
在这里插入图片描述

创建成功后可以看到这样的目录结构:
在这里插入图片描述

好了,这样一个node项目就创建完成了。启动项目,浏览器输入localhost:3000,界面显示就证明成功了,这里的端口号可以在bin下的www.js中进行修改。这里主要主要说的是路由的配置。
项目启动且能访问了,有些小伙伴是不是就已经迫不及待的想自己写一个方法来尝试呢?
这个时候就需要配置路由了,打开app.js可以看到
var indexRouter = require(’./routes/index’);
这个是加载routes下的index路由文件,
app.user(’/’,indexRouter );
这个就是配置路由挂起的配置了
那么现在就创建一个新的路由文件,名字叫做log.js(创建在routes目录下的),在js中添加如下代码

var express = require('express');
var router = express.Router();

router.get('/log',function (req,res,next) {
    console.log('******进入自定义方法********')
});
module.exports=router;

然后去app.js中进行配置
var log = routes(’./routes/log’);同时挂起路由
app.user(’/log’,log);
重启,访问localhost:3000/log/log
发现控制台打印了:进入自定义方法**证明路由已经成功添加了,但是这个时候就会发现个问题,如果我有很多个路由,那么就要在app中添加很多个app.user();这样就有点像初学servlet一样,每次添加都要在web中配置一样,那在不适用框架的情况下证明来动态配置呢,这就是我才学的一个方法了,不适用框架来进行动态挂起所有路由;

  1. 在项目中创建一个新的目录
    目录结构可自行定义,这是我的目录结构
    在这里插入图片描述
  2. app.js同级目录下创建文件夹route.js(文件名随便起都可以的)
    在route下添加如下代码:
/**
* 动态遍历目录加载路由工具
*/
var fs = require("fs");
// 动态路由
var loadRoute = {
path : './app/',
app : null,
// 遍历目录
listDir : function(dir){
var fileList = fs.readdirSync(dir.toString(),'utf-8');//遍历该级目录下的所有文件夹
console.log("当前路径:"+dir+" 下级目录所有文件名:"+fileList.toString());
for(var i=0;i<fileList.length;i++) {
var stat = fs.lstatSync(dir + fileList[i]);
// 是目录,需要继续
if (stat.isDirectory()) {
this.listDir(dir + fileList[i] + '/');
} else {
this.loadRoute(dir + fileList[i]);
}
}
},
// 加载路由
loadRoute : function(routeFile){
console.log("加载路由地址文件:"+routeFile);
var route = require(routeFile.substring(0,routeFile.lastIndexOf('.')));
// 在路由文件中定义了一个basePath变量,设置路由路径前缀
if(route.basePath){
this.app.use(route.basePath,route);
}else{
this.app.use(route);
}
},
// 初始化入口
init : function(app,path){
if(!app){
console.error("系统主参数App未设置");
return false;
}
this.app = app;
this.path = path?path:this.path;
this.listDir(this.path);
}
};

module.exports = loadRoute;
  1. 在app.js问价中添加应用route.js,并调用route中的初始化方法
    app整体代码如下:
    主要是加载var route = require(’./route’);和route.init(app,[’./app/’]);
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var route = require('./route');//自动加载路由

/*var indexRouter = require('./routes/index');
var usersRouter = require('./app/dome1/controller/logcontroller');*/

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

route.init(app,['./app/']);//启动自动加载路由初始化方法,里面的参数根据个人定义的路径不一定是我的这个
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};

// render the error page
res.status(err.status || 500);
res.render('error');
});

module.exports = app;

在app/dome1/controller/下创建一个新的路由文件logcontroller.js
里面的代码直接用前面log.js中的代码。
然后重新启动项目,访问localhost:3000发现不能直接访问了404,这是因为index.js文件不在app目录下,route问价遍历的是app目录下的所有文件,但是index不在其中,所有路由没有挂起,访问404,然后在访问localhost:3000/log
发现控制台中打印出了*******进入自定义方法********
这样一个完整的自动挂起所有路由的方法就已经完成了,其实也可以用框架来实现,但是鉴于初学,我没有直接去看公司的框架,因为也看不懂。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值