Skip to content

Commit cd6cd13

Browse files
committed
define user error
1 parent b7e2a2b commit cd6cd13

File tree

5 files changed

+73
-29
lines changed

5 files changed

+73
-29
lines changed

app.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var sessions = require('./routes/sessions');
1616
var account = require('./routes/account');
1717
var users = require('./routes/users');
1818
var apps = require('./routes/apps');
19+
var AppError = require('./core/services/app-error');
1920
var app = express();
2021
app.use(helmet());
2122
app.disable('x-powered-by');
@@ -69,29 +70,29 @@ app.use('/apps', apps);
6970
// will print stacktrace
7071
if (app.get('env') === 'development') {
7172
app.use(function(req, res, next) {
72-
var err = new Error('Not Found');
73-
err.status = 404;
74-
next(err);
73+
next(new AppError.NotFound());
7574
});
76-
app.use(function(err, req, res) {
75+
app.use(function(err, req, res, next) {
7776
res.status(err.status || 500);
7877
res.render('error', {
7978
message: err.message,
8079
error: err
8180
});
81+
console.error(err.stack);
8282
});
8383
} else {
8484
app.use(function(req, res, next) {
85-
res.status(404).send('Not Found');
85+
res.status(404).send(new AppError.NotFound());
8686
});
8787
// production error handler
8888
// no stacktraces leaked to user
89-
app.use(function(err, req, res) {
90-
res.status(err.status || 500);
91-
res.render('error', {
92-
message: '服务器繁忙,请稍后再试!',
93-
error: {}
94-
});
89+
app.use(function(err, req, res, next) {
90+
var status = err.status || 500;
91+
res.status(status);
92+
var error = new AppError.AppError(`服务器繁忙,请稍后再试!`);
93+
error.status = status;
94+
res.status(status).send(error);
95+
console.error(err.stack);
9596
});
9697
}
9798

core/services/app-error.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var util = require('util')
2+
3+
var AppError = function (msg, constr) {
4+
if(msg) {
5+
msg = msg.toString();
6+
}
7+
Error.captureStackTrace(this, constr || this)
8+
this.message = msg || 'Error'
9+
this.name = 'AppError'
10+
}
11+
util.inherits(AppError, Error)
12+
13+
var NotFoundError = function(msg) {
14+
NotFoundError.super_.call(this, msg, this.constructor)
15+
this.message = msg || 'Not Found';
16+
this.name = 'NotFoundError'
17+
this.status = 404
18+
}
19+
util.inherits(NotFoundError, AppError)
20+
21+
module.exports = {
22+
AppError: AppError,
23+
NotFound: NotFoundError
24+
}
25+

core/services/client-manager.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var models = require('../../models');
44
var _ = require('lodash');
55
var common = require('../utils/common');
66
var factory = require('../utils/factory');
7+
var AppError = require('./app-error');
78

89
var proto = module.exports = function (){
910
function ClientManager() {
@@ -77,12 +78,12 @@ proto.updateCheck = function(deploymentKey, appVersion, label, packageHash) {
7778
shouldRunBinaryVersion: false
7879
};
7980
if (_.isEmpty(deploymentKey) || _.isEmpty(appVersion)) {
80-
return Promise.reject(new Error("please input deploymentKey and appVersion"))
81+
return Promise.reject(new AppError.AppError("please input deploymentKey and appVersion"))
8182
}
8283
return models.Deployments.findOne({where: {deployment_key: deploymentKey}})
8384
.then(function (dep) {
8485
if (_.isEmpty(dep)) {
85-
throw new Error('does not found deployment');
86+
throw new AppError.AppError('does not found deployment');
8687
}
8788
return models.DeploymentsVersions.findOne({where: {deployment_id: dep.id, app_version: appVersion}});
8889
})
@@ -132,18 +133,18 @@ proto.updateCheck = function(deploymentKey, appVersion, label, packageHash) {
132133

133134
proto.getPackagesInfo = function (deploymentKey, label) {
134135
if (_.isEmpty(deploymentKey) || _.isEmpty(label)) {
135-
return Promise.reject(new Error("please input deploymentKey and label"))
136+
return Promise.reject(new AppError.AppError("please input deploymentKey and label"))
136137
}
137138
return models.Deployments.findOne({where: {deployment_key: deploymentKey}})
138139
.then(function (dep) {
139140
if (_.isEmpty(dep)) {
140-
throw new Error('does not found deployment');
141+
throw new AppError.AppError('does not found deployment');
141142
}
142143
return models.Packages.findOne({where: {deployment_id: dep.id, label: label}});
143144
})
144145
.then(function (packages) {
145146
if (_.isEmpty(packages)) {
146-
throw new Error('does not found packages');
147+
throw new AppError.AppError('does not found packages');
147148
}
148149
return packages;
149150
});

routes/index.js

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
var express = require('express');
22
var router = express.Router();
33
var Promise = require('bluebird');
4+
var AppError = require('../core/services/app-error');
45
var middleware = require('../core/middleware');
56
var ClientManager = require('../core/services/client-manager');
67
var _ = require('lodash');
78

8-
router.get('/', function(req, res) {
9+
router.get('/', function(req, res, next) {
910
res.render('index', { title: 'CodePushServer' });
1011
});
1112

12-
router.get('/README.md', function(req, res) {
13+
router.get('/README.md', function(req, res, next) {
1314
var MarkdownIt = require('markdown-it');
1415
const path = require('path');
1516
const fs = require('fs');
@@ -21,16 +22,19 @@ router.get('/README.md', function(req, res) {
2122
res.send(md.render(source));
2223
})
2324
.catch(e=>{
24-
res.send(e.message);
25+
if (e instanceof AppError.AppError) {
26+
res.send(e.message);
27+
} else {
28+
next(e);
29+
}
2530
});
26-
2731
});
2832

2933
router.get('/tokens', function(req, res) {
3034
res.render('tokens', { title: '获取token' });
3135
});
3236

33-
router.get('/updateCheck', function(req, res){
37+
router.get('/updateCheck', function(req, res, next){
3438
var deploymentKey = _.get(req, "query.deploymentKey");
3539
var appVersion = _.get(req, "query.appVersion");
3640
var label = _.get(req, "query.label");
@@ -41,7 +45,11 @@ router.get('/updateCheck', function(req, res){
4145
res.send({"updateInfo":rs});
4246
})
4347
.catch(function (e) {
44-
res.status(404).send(e.message);
48+
if (e instanceof AppError.AppError) {
49+
res.status(404).send(e.message);
50+
} else {
51+
next(e);
52+
}
4553
});
4654
});
4755

@@ -51,8 +59,10 @@ router.post('/reportStatus/download', function(req, res){
5159
var deploymentKey = _.get(req, "body.deploymentKey");
5260
var clientManager = new ClientManager();
5361
clientManager.reportStatusDownload(deploymentKey, label, clientUniqueId)
54-
.catch(function (e) {
55-
console.log(e);
62+
.catch(function (err) {
63+
if (!err instanceof AppError.AppError) {
64+
console.error(err.stack)
65+
}
5666
});
5767
res.send('OK');
5868
});
@@ -63,8 +73,10 @@ router.post('/reportStatus/deploy', function(req, res){
6373
var deploymentKey = _.get(req, "body.deploymentKey");
6474
var clientManager = new ClientManager();
6575
clientManager.reportStatusDeploy(deploymentKey, label, clientUniqueId, req.body)
66-
.catch(function (e) {
67-
console.log(e);
76+
.catch(function (err) {
77+
if (!err instanceof AppError.AppError) {
78+
console.error(err.stack)
79+
}
6880
});
6981
res.send('OK');
7082
});

routes/sessions.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,21 @@ var router = express.Router();
33
var _ = require('lodash');
44
var models = require('../models');
55
var middleware = require('../core/middleware');
6+
var AppError = require('../core/services/app-error');
67

7-
router.delete('/:machineName', middleware.checkToken, function(req, res){
8+
router.delete('/:machineName', middleware.checkToken, function(req, res, next){
89
var machineName = _.trim(decodeURI(req.params.machineName));
910
var uid = req.users.id;
1011
models.UserTokens.destroy({where: {created_by:machineName, uid: uid}})
1112
.then(function(rowNum){
1213
res.send("");
1314
})
14-
.catch(function (e) {
15-
res.status(406).send(e.message);
15+
.catch(e => {
16+
if (e instanceof AppError.AppError) {
17+
res.status(406).send(e.message);
18+
} else {
19+
next(e);
20+
}
1621
});
1722
});
1823

0 commit comments

Comments
 (0)