使用Node结合express实现路由分级

265 阅读1分钟

目标

随着项目接口的增多,路由往往不在一个文件中,需要分类防止,通过express框架实现类似功能。

文件路径

路径如下:

├── app.js
├── app.json
├── httpServer.log
├── package-lock.json
├── package.json
├── routes
│   ├── login.js
│   └── psr.js
└── utils.js

其中app.js是主文件,app.json配置后端地址和端口,分路由放在/routes路径下,utils.js放置公用方法。

app.json

{
    "serverHost": "127.0.0.1",
    "serverPort": 18187,
    "httpPort": 8000,
    "log": "debug",
    "redisPort": 6379
}

其中serverPort是后端端口,httpPort是前端端口。

app.js

const express = require('express');
const bodyParser = require('body-parser');
const winston = require('winston');
const moment = require('moment');
const redis = require('redis');
var fs = require('fs');
const http = require('http');
const config = require("./app.json");
var utils = require("./utils");


const app = express();

// 创建web服务器
const httpServer = http.createServer(app);
app.use(bodyParser.json());

var redisClient = redis.createClient(config.redisPort, config.serverHost, {});

redisClient.on("error", function (err) {
    logger.log('error', 'Redis 连接错误, err = %s', err.message);
});

redisClient.on('ready', function (res) {
    logger.log('info', '连接Redis成功');
});

redisClient.on('reconnecting', function () {
    logger.log('warn', '重新连接Redis成功');
});

redisClient.on('connect', function () {
    logger.log('info', '连接Redis');
});


/**
 * 后端服务启动
 */
app.listen(config.serverPort, (res, req) => {
    console.log('backend server start at port %s', config.serverPort);
})

/**
 * 前端服务启动
 */
// httpServer.listen(config.httpPort, function () {
//     console.log("http访问地址为 http://%s:%s", config.serverHost, config.httpPort);
// });


/**
 * 主路由
 */
app.get('/', function (req, res) {
    res.send('Hello World');
});

/**
 * 登录路由
 */
app.use('/api', require('./routes/login.js'));

/**
 * PSR路由
 */
 app.use('/api/v2/information', require('./routes/psr.js'));

注意如果要解析JSON文件,需要加上:

const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());

login.js

分路由文件login.js如下:

const app = require('express');
const utils = require('utility');
const router = app.Router();

// 登录
router.post('/login', function (req, res) {
    console.log(req);
    const {
        password,
        userName,
    } = req.body;

    // 登录成功
    if (userName === 'admin' && password === '12345') {
        res.send({
            status: 'ok',
            userName: 'admin',
            currentAuthority: 'systemManager',
        });
    } else {
        // 登录失败
        res.send({
            status: 'error',
            currentAuthority: 'guest',
        });
    }
})

module.exports = router;

Node中1个文件调用另1个文件中的方法

被调用方:utils.js

const {
    v4: uuidv4
} = require('uuid');


function randomWord(randomFlag, min, max) {
    ...
    return str;
}


function generateUUID() {
   ...
    return uuid;
}


module.exports = {
    randomWord,
    generateUUID
}

调用方:app.js

var utils = require("./utils");

setInterval(() => {
    const redisKey = `account/password`;
    redisClient.hmset(redisKey, 'password', utils.generateUUID());
}, 1000 * 30 * 60);