目标
随着项目接口的增多,路由往往不在一个文件中,需要分类防止,通过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);