Skip to content

Commit 016b2c6

Browse files
committed
前后端分离,cros跨域,解决vue axios与express cookie不能跨域共享问题
1 parent 7e0aa01 commit 016b2c6

File tree

11 files changed

+234
-55
lines changed

11 files changed

+234
-55
lines changed

server/dev-server.js renamed to build/dev-server.js

+2-25
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
1-
require('../build/check-versions')()
1+
require('./check-versions')()
22

33
var config = require('../config')
44
if (!process.env.NODE_ENV) {
55
process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
66
}
77

88
var opn = require('opn')
9-
// express
109
var path = require('path')
1110
var express = require('express')
12-
var cookieParser = require('cookie-parser')
13-
var session = require('express-session');
14-
var bodyParser = require('body-parser')
15-
var routes = require('./routes/index');
16-
1711
var webpack = require('webpack')
1812
var proxyMiddleware = require('http-proxy-middleware')
19-
var webpackConfig = require('../build/webpack.dev.conf')
13+
var webpackConfig = require('./webpack.dev.conf')
2014

2115
// default port where dev server listens for incoming traffic
2216
var port = process.env.PORT || config.dev.port
@@ -27,23 +21,6 @@ var autoOpenBrowser = !!config.dev.autoOpenBrowser
2721
var proxyTable = config.dev.proxyTable
2822

2923
var app = express()
30-
31-
//app.use(express.static(path.join(__dirname, 'static')));
32-
app.use(bodyParser.json());
33-
app.use(bodyParser.urlencoded({ extended: false }));
34-
// cookie
35-
app.use(cookieParser());
36-
app.use(session({
37-
secret: 'backend',
38-
name:'backend',
39-
cookie: {
40-
maxAge: 1000 * 60 * 60
41-
},// 1h
42-
resave: false,
43-
saveUninitialized: true,
44-
}));
45-
routes(app);
46-
4724
var compiler = webpack(webpackConfig)
4825

4926
var devMiddleware = require('webpack-dev-middleware')(compiler, {

package.json

+14-7
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,31 @@
55
"author": "ludis <[email protected]>",
66
"private": true,
77
"scripts": {
8-
"dev": "node server/dev-server.js",
9-
"start": "node server/dev-server.js",
8+
"dev": "node build/dev-server.js",
9+
"start": "node build/dev-server.js",
1010
"build": "node build/build.js",
11-
"lint": "eslint --ext .js,.vue src"
11+
"lint": "eslint --ext .js,.vue src",
12+
"server": "node server/bin/www"
1213
},
1314
"dependencies": {
1415
"axios": "^0.16.1",
15-
"body-parser": "^1.17.2",
16-
"cookie-parser": "^1.4.3",
17-
"express-session": "^1.15.3",
1816
"iview": "^2.0.0-rc.15",
1917
"moment": "^2.18.1",
2018
"monk": "^5.0.2",
2119
"vue": "^2.3.3",
2220
"vue-awesome": "^2.3.1",
2321
"vue-axios": "^2.0.2",
2422
"vue-router": "^2.3.1",
25-
"vuex": "^2.3.1"
23+
"vuex": "^2.3.1",
24+
"async": "^2.1.4",
25+
"cors": "^2.8.3",
26+
"body-parser": "~1.15.1",
27+
"cookie-parser": "~1.4.3",
28+
"debug": "~2.2.0",
29+
"express": "~4.13.4",
30+
"express-session": "latest",
31+
"formidable": "^1.1.1",
32+
"morgan": "~1.7.0"
2633
},
2734
"devDependencies": {
2835
"autoprefixer": "^6.7.2",

server/app.js

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
var express = require('express');
2+
var path = require('path');
3+
var logger = require('morgan');
4+
var cookieParser = require('cookie-parser');
5+
var bodyParser = require('body-parser');
6+
var session = require('express-session');
7+
//const MongoStore = require('connect-mongo')(session);
8+
9+
//var redisStore = require('connect-redis')(session);
10+
var cors = require('cors');
11+
12+
var routes = require('./routes/index');
13+
14+
var app = express();
15+
16+
/*app.all('/*', function(req, res, next) {
17+
res.header("Access-Control-Allow-Origin", "*");
18+
res.header("Access-Control-Allow-Headers", "X-Requested-With");
19+
next();
20+
});*/
21+
22+
app.use(logger('dev'));
23+
app.use(bodyParser.json());
24+
app.use(bodyParser.urlencoded({ extended: false }));
25+
26+
// cookie
27+
app.use(cors({
28+
origin:['http://localhost:8080'],
29+
methods:['GET','POST'],
30+
credentials: true
31+
}));
32+
33+
/*app.use(cors({
34+
origin:['http://localhost:8080'],
35+
methods:['GET','POST'],
36+
credentials: true
37+
}));*/
38+
//app.set('trust proxy', 1)
39+
app.use(cookieParser());
40+
app.use(session({
41+
secret: 'backend123',
42+
name:'backend',
43+
cookie: {
44+
maxAge: 1000 * 60 * 60,
45+
},// 1h
46+
resave: true,
47+
saveUninitialized: false,
48+
}));
49+
//app.use(express.static(path.join(__dirname, 'public')));
50+
// cookie
51+
//app.use(cookieParser());
52+
//app.set('trust proxy', 1)
53+
/*app.use(session({
54+
secret: 'backend',
55+
store: new redisStore(),
56+
name:'backend',
57+
cookie: {
58+
maxAge: 1000 * 60 * 60
59+
},// 1h
60+
resave: false,
61+
saveUninitialized: true,
62+
}));*/
63+
64+
routes(app)
65+
66+
// catch 404 and forward to error handler
67+
app.use(function(req, res, next) {
68+
var err = new Error('Not Found');
69+
err.status = 404;
70+
next(err);
71+
});
72+
73+
// error handler
74+
app.use(function(err, req, res, next) {
75+
// set locals, only providing error in development
76+
res.locals.message = err.message;
77+
res.locals.error = req.app.get('env') === 'development' ? err : {};
78+
79+
// render the error page
80+
res.status(err.status || 500);
81+
res.render('error');
82+
});
83+
84+
module.exports = app;

server/bin/www

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env node
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
var app = require('../app');
8+
var debug = require('debug')('backend:server');
9+
var http = require('http');
10+
11+
/**
12+
* Get port from environment and store in Express.
13+
*/
14+
15+
var port = normalizePort(process.env.PORT || '3000');
16+
app.set('port', port);
17+
18+
/**
19+
* Create HTTP server.
20+
*/
21+
22+
var server = http.createServer(app);
23+
24+
/**
25+
* Listen on provided port, on all network interfaces.
26+
*/
27+
28+
server.listen(port);
29+
server.on('error', onError);
30+
server.on('listening', onListening);
31+
32+
/**
33+
* Normalize a port into a number, string, or false.
34+
*/
35+
36+
function normalizePort(val) {
37+
var port = parseInt(val, 10);
38+
39+
if (isNaN(port)) {
40+
// named pipe
41+
return val;
42+
}
43+
44+
if (port >= 0) {
45+
// port number
46+
return port;
47+
}
48+
49+
return false;
50+
}
51+
52+
/**
53+
* Event listener for HTTP server "error" event.
54+
*/
55+
56+
function onError(error) {
57+
if (error.syscall !== 'listen') {
58+
throw error;
59+
}
60+
61+
var bind = typeof port === 'string'
62+
? 'Pipe ' + port
63+
: 'Port ' + port;
64+
65+
// handle specific listen errors with friendly messages
66+
switch (error.code) {
67+
case 'EACCES':
68+
console.error(bind + ' requires elevated privileges');
69+
process.exit(1);
70+
break;
71+
case 'EADDRINUSE':
72+
console.error(bind + ' is already in use');
73+
process.exit(1);
74+
break;
75+
default:
76+
throw error;
77+
}
78+
}
79+
80+
/**
81+
* Event listener for HTTP server "listening" event.
82+
*/
83+
84+
function onListening() {
85+
var addr = server.address();
86+
var bind = typeof addr === 'string'
87+
? 'pipe ' + addr
88+
: 'port ' + addr.port;
89+
debug('Listening on ' + bind);
90+
}

server/lib/rbac.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
12
const rbac = (req, res, next) => {
23
// RBAC权限检验
34
console.log('Time:', Date.now());
45
console.log('originalUrl:'+req.originalUrl)
56
console.log('baseUrl:'+req.baseUrl)
67
console.log('path:'+req.path)
8+
console.log(req.session.user)
9+
console.log(req.session.permission)
710

811
const pathArr = ['/agent/new','/agent/list','/mongo/list','/mongo/insert','/mongo/update','/mongo/remove'];
912

@@ -30,7 +33,7 @@ const rbac = (req, res, next) => {
3033
})
3134
}
3235
}else{
33-
// 静态资源、无需授权路径
36+
// 无需授权路径
3437
next()
3538
}
3639

server/routes/index.js

+16-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
//var express = require('express');
23
//var router = express.Router();
34

@@ -35,10 +36,12 @@ module.exports = function(app){
3536
app.post('/login', function(req, res, next){
3637
let account = req.body.account,
3738
pwd = req.body.pwd;
38-
39+
console.log('account:'+account,'pwd:'+pwd)
40+
console.log(req.params)
3941
const user = db.get('user');
40-
user.findOne({account: account}).then((userinfo)=>{
42+
user.findOne({account: account}, '-_id').then((userinfo)=>{
4143
if( userinfo ){
44+
console.log('userinfo')
4245
console.log(userinfo)
4346
if( md5(pwd) == userinfo.pwd ){
4447

@@ -49,13 +52,13 @@ module.exports = function(app){
4952
}; // 权限合集
5053
// 获取角色的所有权限
5154
async.eachSeries( userinfo.roles, function(item,cb){
52-
role.findOne({name: item}).then((result) => { console.log('findOne role:');console.log(result)
55+
role.findOne({name: item}, '-_id').then((result) => { console.log('findOne role:');console.log(result)
5356
if( result ){
5457
//cb(null,result)
5558
let permission = db.get('permission')
5659
// 获取权限的所有dom
5760
async.eachSeries( result.permissions, function(item,callback){
58-
permission.findOne({ename: item}).then((presult) => { console.log('findOne per:');console.log(presult)
61+
permission.findOne({ename: item}, '-_id').then((presult) => { console.log('findOne per:');console.log(presult)
5962
if( presult ){
6063
perObj.dom = perObj.dom.concat( presult.dom )
6164
perObj.path = perObj.path.concat( presult.path )
@@ -99,6 +102,9 @@ module.exports = function(app){
99102
}
100103
req.session.user = userinfo;
101104
req.session.permission = perObj;
105+
console.log('123')
106+
console.log(req.session.user);console.log(req.session.permission);
107+
console.log('456')
102108
res.json(data);
103109
}
104110
db.close();
@@ -114,7 +120,7 @@ module.exports = function(app){
114120
// 没有此用户
115121
let data = {
116122
status: 0,
117-
msg: 'wrong password'
123+
msg: 'no user'
118124
}
119125
res.json(data);
120126
}
@@ -135,9 +141,9 @@ module.exports = function(app){
135141
admin = req.body.admin;
136142

137143
const user = db.get('user');
138-
user.findOne({account: account}).then((userinfo)=>{
144+
user.findOne({account: account}, '-_id').then((userinfo)=>{
139145
if(!userinfo){
140-
user.findOne({account: admin}).then((adminInfo)=>{
146+
user.findOne({account: admin}, '-_id').then((adminInfo)=>{
141147
if( adminInfo ){
142148
if( adminInfo.parents ){
143149
var p = adminInfo.parents
@@ -181,7 +187,8 @@ module.exports = function(app){
181187
agent = [];
182188
console.log('account:'+account);
183189
const users = db.get('user');
184-
users.find({}).each((user, {close, pause, resume}) => {
190+
users.find({},'-_id').each((user, {close, pause, resume}) => {
191+
console.log(user)
185192
if( user.parents.indexOf(account) >= 0 ){
186193
agent.push(user)
187194
}
@@ -196,7 +203,7 @@ module.exports = function(app){
196203
})
197204

198205
app.get('/mongo/list', function(req, res, next){
199-
posts.find({}).then((result) => {
206+
posts.find({},'-_id').then((result) => {
200207
//console.log(result);
201208
res.json(result);
202209
}).then(() => db.close())

0 commit comments

Comments
 (0)