Commit 763a58b2 by lixinming

no message

parent 8e421fec
[2021-12-23T15:42:43.868] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:45.375] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:45.764] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:45.949] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:46.126] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:46.317] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:46.500] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:46.677] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:46.852] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:47.036] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:47.212] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:42:47.397] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T15:09:35.009] [ERROR] errorLogger - errorInfo => 参数错误 loginId |
[2021-12-23T15:10:03.399] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:16:51.510] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:16:58.998] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:22:58.188] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:23:01.188] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:24:36.037] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:26:39.975] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:33:39.247] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:33:58.597] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:34:04.885] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:35:52.269] [ERROR] errorLogger - errorInfo => 参数错误 loginId |
[2021-12-23T15:38:34.972] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:40:06.100] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T14:49:48.318] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T14:50:02.990] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T14:51:36.617] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T14:52:10.475] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T14:57:16.473] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:01:01.600] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:03:05.025] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:03:05.408] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:03:10.760] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:03:11.575] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:03:11.767] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:03:11.960] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:08:36.975] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T15:08:58.312] [ERROR] errorLogger - errorInfo => 参数错误 1 |
[2021-12-23T10:06:50.709] [ERROR] errorLogger - errorInfo => sign error |
[2021-12-23T10:07:07.717] [ERROR] errorLogger - errorInfo => sign error |
[2021-12-23T13:35:46.953] [ERROR] errorLogger - errorInfo => 参数错误 loginId |
[2021-12-23T13:36:03.490] [ERROR] errorLogger - errorInfo => 参数错误 loginId |
[2021-12-23T13:36:42.946] [ERROR] errorLogger - errorInfo => 参数错误 loginId |
[2021-12-23T14:34:27.786] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T14:36:50.091] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T14:37:20.584] [ERROR] errorLogger - errorInfo => 密码不正确 |
[2021-12-23T14:37:40.494] [ERROR] errorLogger - errorInfo => 参数错误 loginId |
[2021-12-23T14:38:30.766] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T14:42:08.981] [ERROR] errorLogger - errorInfo => test |
[2021-12-23T14:43:33.365] [ERROR] errorLogger - errorInfo => 参数错误 loginId |
import formidable = require('formidable');
import { upImgPathConfig } from '../serverConfig';
import { getPort, myIp, upImgPathConfig } from '../serverConfig';
import * as userData from './../model/users';
import * as pictureData from './../model/picture';
import * as crypto from 'crypto';
import { BizError } from '../util/bizError';
import { psdForPng } from '../util/psd';
import moment = require('moment');
const fs = require('fs');
const path = require('path');
//上传psd文件
export async function upPsdFile(req, userId, psdType, userName, desc) {
export async function upPsdFile(req, userId, userName) {
let {fileName, pId} = getFileName();
let upResult:any = await up(req, fileName);
let success = true;
if (upResult.file) {
let pngName = psdForPng(fileName);
let size = upResult.file.size;
await pictureData.addOncePic(pId, userId, userName, fileName, pngName, psdType, desc, size);
} else {
if (upResult.files && upResult.files.file && upResult.fields ) {
let {pngName, width, height} = psdForPng(fileName);
let size = upResult.files.file.size;
let picName = upResult.fields.name;
let desc = upResult.fields.desc;
let psdType = upResult.fields.psdType;
await pictureData.addOncePic(pId, userId, userName, fileName, pngName, psdType, desc, size, picName, width, height);
}else {
success = false;
throw new BizError("上传psd错误 fileName", fileName);
}
......@@ -34,10 +38,13 @@ async function up(req, fileName) {
})
return new Promise((resolve, reject) => {
form.parse(req, async (err, fields, files) => {
//这里验证表单的必要参数
if (!fields.name ) throw new BizError("图片名称为必要参数");
if (!fields.psdType) throw new BizError("参数错误 缺少参数 psdType");
if (err) reject(err);
fs.rename(files.file.path, path.join(psdUrl, 'sdfa/',fileName), (err) => {
fs.rename(files.file.path, path.join(psdUrl, fileName), (err) => {
if (err) throw new BizError("改名失败", err);
else resolve(files);
else resolve({fields, files});
});
});
});
......@@ -56,22 +63,31 @@ export async function picList(picType) {
let picList = [];
let dowPsdUrl = `http://${myIp}:${getPort()}/${upImgPathConfig.psd.replace(/public\//,'')}/`;
let dowPngUrl = `http://${myIp}:${getPort()}/${upImgPathConfig.png.replace(/public\//,'')}/`;
dbList.forEach(info => {
let {pId ,uId ,uName ,psdName ,pngName ,chartType ,createTime ,desc ,size} = info;
let {pId ,uId ,uName ,psdName ,pngName ,chartType ,createTime ,desc ,size, picName, width, height} = info;
picList.push({
id:pId,
pId,
uId,
uName,
psdName,
pngName,
psdUrl:`${dowPsdUrl}${psdName}`,
pngUrl:`${dowPngUrl}${pngName}`,
chartType,
createTime,
createTime:moment(createTime).format("YYYY-MM-DD HH:mm:ss"),
picName:`${picName}.psd`,
desc,
size
size,
width,
height
});
});
return {picList}
let upUrl = `http://${myIp}:${getPort()}/api/pic/up`
return {picList, upUrl}
}
......
......@@ -14,5 +14,5 @@ export async function createDbConnect(connectUrl:string, options?:object) {
if (!options) options = defaultOptions;
console.log("connection mongo=>", connectUrl);
return await mongoose.createConnection(connectUrl);
return await mongoose.createConnection(connectUrl, options).catch(err => {console.log(err)});
}
\ No newline at end of file
......@@ -5,9 +5,9 @@ import { tableInit } from "./table_init";
let picDB;
export async function initDB() {
mongoServerConstVal.picDBUrl
picDB = await createDbConnect(mongoServerConstVal.picDBUrl() ).catch(err => {throw err});
process.stdin.emit(`picDB success url => ${mongoServerConstVal.picDBUrl()} ;`);
console.log(mongoServerConstVal.picDBUrl);
picDB = await createDbConnect(mongoServerConstVal.picDBUrl ).catch(err => {throw err});
process.stdin.emit(`picDB success url => ${mongoServerConstVal.picDBUrl} ;`);
tableInit();
......
......@@ -3,7 +3,13 @@ import { initDB } from "./db/mongo/db_init";
import { httpServer } from "./net/http_server";
import { getPort } from "./serverConfig";
process.setUncaughtExceptionCaptureCallback((e)=>{
console.log(e);
})
async function lanuch() {
initDB();
httpServer.createServer(getPort());
}
......
export function httpErrorHandler(err, req, res, next) {
console.log("in httpErrorHandler");
console.log(err);
//todo 自定义错误编码
if (err) {
if (err.message == "uid is error") {
res.success({success:false, msg:err.message, code:501});
} else if (err.message == "token is error") {
res.success({success:false, msg:err.message, code:502});
}
else {
res.success({success:false, msg:err.message, code:500});
}
}
}
\ No newline at end of file
import { paramatersConfig } from "../routers/router";
import { BizError } from "../util/bizError";
const configMap = {};
paramatersConfig.forEach(info => {
configMap[info.url] = info.parm;
});
export function checkingReqParm(url, body) {
export function checkingReqParam(req, res, next) {
let body = req.body;
let url = req.originalUrl;
let configInfo = configMap[url];
if (!configInfo) return true;
if (!configInfo) return next();
for (let key in configInfo) {
let type = typeof configInfo[key];
let thisParamater = configInfo[key];
let configPam = configInfo[key];
let bodyPam = body[key];
let configType = typeof configInfo[key];
let bodyType = typeof body[key];
let bodyThisParamater = body[key];
if ( type != bodyType ) return `参数错误 ${key}`;
if (thisParamater == [] && !(bodyThisParamater instanceof Array) ) `参数错误 ${key}`;
if ( configType != bodyType ) throw new BizError(`参数错误 ${key}`);
if (configType != "number" && configType != "string" && configType != "boolean") {
if (configPam instanceof Array ) {
if ( !(bodyPam instanceof Array) ) throw new BizError(`参数错误 ${key}`);
}
}
}
return true;
return next();
}
\ No newline at end of file
import { selectUserById } from "../model/users";
import { BizError } from "../util/bizError";
const LRU = require("lru-cache")
......@@ -15,37 +16,33 @@ const notTokenSign = 'xxakdfwosaddf!@3sadfhDAse';
const signKey = "12345678asd!@#%DFFGa";
export async function checkSign(req, res, next) {
let userId = req.headers.userId;
let token = req.headers.token;
let timeStamp = req.headers.timestamp;
if (notTokenInterfaceList.indexOf(req.path) < 0 ) {
let user = await selectUserById(userId);
if (!user) throw new BizError("uid is error");
if (token != user.token) throw new BizError("token is error");
req.headers.user = {
userId : user.uId,
name : user.uName,
};
}
//todo
// let timeStamp = req.headers.timestamp;
if (notTokenInterfaceList.indexOf(req.path) < 0 && req.headers.sign != notTokenSign ) {
let now = Date.now();
if (Math.abs(now - timeStamp) > 120000) {
console.log(req.path, new Date(now), "timeStamp", timeStamp);
return next(new BizError('timeStamp error time difference error'))
}
let sign = getSign(userId, token, timeStamp, req.path, signKey);
let cacheSign = cache.get(sign);
if (cacheSign) {
if (cacheSign > 5) return next(new BizError("sign error repetitive sign"));
else {
cacheSign++;
cache.set(sign,cacheSign);
}
}
else {
cache.set(sign,1);
}
// if (notTokenInterfaceList.indexOf(req.path) < 0 && req.headers.sign != notTokenSign ) {
// let now = Date.now();
// if (Math.abs(now - timeStamp) > 120000) {
// console.log(req.path, new Date(now), "timeStamp", timeStamp);
// return next(new BizError('timeStamp error time difference error'))
// }
// let sign = getSign(userId, token, timeStamp, req.path, signKey);
if (sign != req.headers.sign) {
console.log(req.path, JSON.stringify(req.headers));
next(new BizError("sign error"))
}
}
// if (sign != req.headers.sign) {
// next(new BizError("sign error"))
// }
// }
next();
}
......
export function watch(req, res, next) {
res.success = success.bind({res:res, req:req});
return next();
}
function success(result) {
let resultPack;
if (result && result.success === undefined) {
resultPack = {result, success:true, code:200};
}
if (!result) {
resultPack = {code:500, success:false, msg:'result is null'};
}
this.res.send(resultPack);
}
......@@ -5,13 +5,16 @@ import { picDB } from "../db/mongo/db_init";
const pictureSchema = new Schema({
pId: {type: String, index:true},
uId: {type: String},
uName: {type: String},
psdName: {type: String},
pngName: {type: String},
uName: {type: String},//上传人
psdName: {type: String}, //psd文件名称
pngName: {type: String}, //png文件名称
chartType:{type:Number, index:true},// 按图表类型分 后续有新的标签类型,就往后加
createTime:{type:Date, index:true},
picName:String, //图片名称
desc:{type:String},//描述
size:{type:Number},//文件大小 单位: b
width:Number,
height:Number,
});
let pictureModel;
......@@ -30,7 +33,7 @@ export async function selectPicById(pId) {
}
export async function addOncePic(pId, uId, uName, psdName, pngName, chartType, desc, size) {
let addInfo = {pId, uId, uName, psdName, pngName, chartType, desc, size, createTime:new Date()};
export async function addOncePic(pId, uId, uName, psdName, pngName, chartType, desc, size, picName, width, height) {
let addInfo = {pId, uId, uName, psdName, pngName, chartType, desc, size, createTime:new Date(), picName, width, height};
return await pictureModel.create(addInfo);
}
......@@ -6,9 +6,10 @@ import { picDB } from "../db/mongo/db_init";
const usersSchema = new Schema({
uId: {type:String, index: true}, //id
loginId:{type:String, index:true},//管理员账号
uName: {type: String}, //管理员名称
uPwd: {type: String}, //管理员密码
uName: {type: String}, //名称
uPwd: {type: String}, //密码
uImg: {type: String}, //头像
token:String,//token
});
......@@ -28,7 +29,7 @@ export async function selectUserById(uId) {
}
export async function selectUserByLoginId(loginId) {
return await usersModel.find( {loginId}).exec();
return await usersModel.findOne( {loginId}).exec();
}
export async function addOnceUser(uId, loginId, uName, uPwd) {
......
......@@ -3,10 +3,12 @@ import bodyParser = require('body-parser');
import sign = require('../middleware/sign');
import routers = require('../routers/router');
import compression = require('compression');
import { encryptionReturn } from '../middleware/encryptionReturn';
import { getEnv } from '../serverConfig';
import { checkSign } from '../middleware/sign';
import { checkingReqParm } from '../middleware/paramaterCheck';
import { checkingReqParam } from '../middleware/paramaterCheck';
import { httpErrorHandler } from '../middleware/httpErrorHandler';
import { watch } from '../middleware/watch';
import * as fallback from 'express-history-api-fallback';
import * as path from "path";
export class httpServer {
static createServer(port:number) {
......@@ -29,19 +31,16 @@ export class httpServer {
httpServer.use(express.static('public') );
httpServer.use(watch);
httpServer.use(bodyParser.json({limit:"10kb"}));
httpServer.use(compression());
httpServer.use(checkSign);
httpServer.use(checkingReqParm);
//演示环境加密数据
if (getEnv() == "dem") {
console.log("演示环境 开启数据加密");
httpServer.use(encryptionReturn);
}
routers.setRouter(httpServer);
httpServer.use(checkingReqParam);
routers.setRouter(httpServer);
httpServer.use(httpErrorHandler);
httpServer.listen(port);
console.log('server listen on port:'+port);
......
import * as asyncHandler from 'express-async-handler';
import * as picBiz from '../biz/pic';
export function setRouter(httpServer) {
httpServer.post('/api/pic/up', asyncHandler(upFile));
httpServer.post('/api/pic/list', asyncHandler(fileList));
......@@ -7,22 +9,20 @@ export function setRouter(httpServer) {
}
async function upFile(req, res) {
let userId = req.userId;
let psdType = req.psdType;
let userName = req.userName;
let desc = req.desc;
let result = await picBiz.upPsdFile(req, userId, psdType, userName, desc);
res.send(result);
let userId = req.headers.user.userId || "testId";
let psdType = req.headers.user.name || "testUserName";
let result = await picBiz.upPsdFile(req, userId, psdType);
res.success(result);
}
async function fileList(req, res) {
let picType = req.picType;
let result = await picBiz.picList(picType);
res.send(result);
res.success(result);
}
async function picDetails(req, res) {
let pId = req.pId;
let result = await picBiz.getPicDetails(pId);
res.send(result);
res.success(result);
}
\ No newline at end of file
......@@ -11,10 +11,6 @@ export function setRouter(httpServer) {
export const paramatersConfig = [
{url:"/api/user/login", parm:{loginId:"", pwd:""} },
{url:"/api/user/register", parm:{loginId:"", pwd:-1, uName:""} },
{url:"/api/user/test", parm:{roles:[], data:{}, num:1, str:"'" } }
{url:"/api/user/register", parm:{loginId:"", pwd:"", uName:""} },
{url:"/api/user/test", parm:{roles:[], data:{}, num:1, str:"" } }
];
export function newSetRouter(httpServer) {
}
\ No newline at end of file
import * as asyncHandler from 'express-async-handler';
import * as userBiz from './../biz/user';
export function setRouter(httpServer) {
httpServer.post('/api/user/login', asyncHandler(login));
httpServer.post('/api/user/register', asyncHandler(register));
......
const os = require('os');
//端口
export function getPort() : number {
return Number(process.env.PORT) || Number(process.argv[3]) || 60000;
}
// sit 测试环境 prod 生产环境 dem 演示环境(测试数据,前端无密码访问)
export function getEnv() : string {
return process.argv[2] || "sit";
}
//mongo数据库连接字符
export const mongoServerConstVal = {
picDBUrl:getPicDBUrl,
picDBUrl:getPicDBUrl()
}
//mysql数据库连接对象
export const mySqlConfig = {
mysqlHost: '',
mysqlPort: 0,
mysqlUser: '',
mysqlPwd: '',
};
//png路径
export const upImgPathConfig = {
png:"res/up/png",
jpg:"res/up/jpg",
psd:"res/up/psd",
png:"public/up/png",
jpg:"public/up/jpg",
psd:"public/up/psd",
};
//log路径
......@@ -40,3 +30,19 @@ function getPicDBUrl() {
return 'mongodb://127.0.0.1:27017/picDB';
}
export let myIp = "";
function getIPAdress() {
var interfaces = os.networkInterfaces();
console.log('interfaces',interfaces);
for (var devName in interfaces) {
var iface = interfaces[devName];
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
return alias.address;
}
}
}
}
myIp = getIPAdress();
......@@ -7,6 +7,6 @@ export class BizError extends Error {
msgStr += once + ' ';
});
logError(msgs);
super(msgStr)
super(msgStr);
}
}
\ No newline at end of file
......@@ -7,10 +7,11 @@ const path = require('path');
* @param fileName psd文件名称,记得带.psd
*/
export function psdForPng(fileName:string) {
fileName = "1213"
const psdName = fileName;
const pngName = fileName+".png";
const pngName = fileName.replace(/.psd/, '')+".png";
let width = 0;
let height = 0;
let filePath = path.join(__dirname.substring(0,__dirname.indexOf("out")), upImgPathConfig.psd, psdName);
let pngFilePath = path.join(__dirname.substring(0,__dirname.indexOf("out")), upImgPathConfig.png, pngName);
......@@ -18,7 +19,9 @@ export function psdForPng(fileName:string) {
try {
let thisPsd = PSD.fromFile(filePath);
thisPsd.parse()
thisPsd.image.toPng();
let pngInfo = thisPsd.image.toPng();
width = pngInfo.width;
height = pngInfo.height;
PSD.open(filePath).then(function (psd) {
psd.image.saveAsPng(pngFilePath);
});
......@@ -26,5 +29,5 @@ export function psdForPng(fileName:string) {
throw new BizError(psdName, "转png失败", err.message || err.msg);
}
return pngName;
return {pngName, width, height};
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment