├── controller └── admin.js ├── .gitignore ├── views ├── index.jade ├── error.jade ├── layout.jade └── login.jade ├── public ├── images │ └── node_log.jpg └── stylesheets │ └── style.css ├── routes ├── index.js └── users.js ├── models └── admin.js ├── package.json ├── mongodb └── db.js ├── app.js └── bin └── www /controller/admin.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | node_modules/ 4 | 5 | dist/ 6 | 7 | npm-debug.log 8 | -------------------------------------------------------------------------------- /views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= title 5 | p Welcome to #{title} 6 | -------------------------------------------------------------------------------- /public/images/node_log.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/okaychen/manageSys-backend/HEAD/public/images/node_log.jpg -------------------------------------------------------------------------------- /views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | block content 8 | -------------------------------------------------------------------------------- /views/login.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | img.logo(src="https://cdn.jsdelivr.net/gh/okaychen/CDN@1.2/BlogSource/gallery/thumb_002.jpg", alt="") 5 | h1= title 6 | p Welcome to #{title} 7 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function(req, res, next) { 6 | res.render('login', { title: '后台系统' }); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /models/admin.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var Schema = mongoose.Schema; 4 | 5 | var adminSchema = new Schema({ 6 | 'username': String, 7 | 'password': String, 8 | }) 9 | 10 | var Admin = mongoose.model('Admin', adminSchema, 'user'); 11 | // 'user'参数--模型会在use集合内查找数据集合,若不指定则按照前者的复数查找 12 | 13 | module.exports = Admin; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "^1.19.0", 10 | "cookie-parser": "~1.4.4", 11 | "debug": "~2.6.9", 12 | "express": "~4.16.1", 13 | "express-session": "^1.16.2", 14 | "http-errors": "~1.6.3", 15 | "jade": "~1.11.0", 16 | "mongodb": "^2.2.33", 17 | "mongoose": "^5.6.8", 18 | "morgan": "~1.9.1" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /mongodb/db.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Yi on 2017/5/8. 3 | */ 4 | 5 | //testDB Model 6 | 7 | //创建 mongodb数据库连接 8 | 9 | var mongoose = require('mongoose'); 10 | var DB = mongoose.connect('mongodb://localhost:27017/managesys'); //红色为数据库名 11 | 12 | // 13 | mongoose.connection.on("open", function () { 14 | console.log("数据库连接成功"); 15 | }); 16 | 17 | // 18 | mongoose.connection.on("error", function (error) { 19 | console.log("数据库连接失败" + error); 20 | }); 21 | 22 | //创建数据文档模板【在SQL数据库中 即一个表(列名字段等) NoSQL数据库中即数据文档(成员变量名)】 23 | var testSchema = new mongoose.Schema({ 24 | SortID: { 25 | type: String 26 | }, 27 | Name: { 28 | type: String 29 | }, 30 | Sex: { 31 | type: String 32 | }, 33 | Address: { 34 | type: String 35 | }, 36 | timeDate: { 37 | type: Date, 38 | default: Date.now() 39 | } 40 | }); 41 | 42 | module.exports = mongoose.model('TestModel', testSchema); -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var createError = require('http-errors'); 2 | var express = require('express'); 3 | var path = require('path'); 4 | var cookieParser = require('cookie-parser'); 5 | var logger = require('morgan'); 6 | var bodyParser = require('body-parser') 7 | var db = require('./mongodb/db') 8 | 9 | var indexRouter = require('./routes/index'); 10 | var usersRouter = require('./routes/users'); 11 | 12 | var app = express(); 13 | 14 | console.log('server running at http://localhost:3000') 15 | 16 | //跨域 后期删 17 | app.all('*', function (req, res, next) { 18 | res.header("Access-Control-Allow-Origin", "http://localhost:8080"); //为了跨域保持session,所以指定地址,不能用* 19 | res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); 20 | res.header("Access-Control-Allow-Headers", "X-Requested-With"); 21 | res.header('Access-Control-Allow-Headers', 'Content-Type'); 22 | res.header('Access-Control-Allow-Credentials', true); 23 | next(); 24 | }); 25 | 26 | // view engine setup 27 | app.set('views', path.join(__dirname, 'views')); 28 | app.set('view engine', 'jade'); 29 | 30 | app.use(logger('dev')); 31 | app.use(express.json()); 32 | app.use(express.urlencoded({ 33 | extended: false 34 | })); 35 | app.use(cookieParser()); 36 | app.use(express.static(path.join(__dirname, 'public'))); 37 | 38 | app.use('/', indexRouter); 39 | app.use('/users', usersRouter); 40 | 41 | // catch 404 and forward to error handler 42 | app.use(function (req, res, next) { 43 | next(createError(404)); 44 | }); 45 | 46 | // error handler 47 | app.use(function (err, req, res, next) { 48 | // set locals, only providing error in development 49 | res.locals.message = err.message; 50 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 51 | 52 | // render the error page 53 | res.status(err.status || 500); 54 | res.render('error'); 55 | }); 56 | 57 | module.exports = app; -------------------------------------------------------------------------------- /bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('server: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 | } 91 | -------------------------------------------------------------------------------- /routes/users.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var AdminModel = require('../models/admin') 4 | var crypto = require('crypto'); 5 | 6 | // 定义返回变量格式 7 | var resDate; 8 | router.use(function (req, res, next) { 9 | resDate = { 10 | code: 0, 11 | message: '' 12 | }; 13 | next(); 14 | }) 15 | 16 | router.post('/login', function (req, res, next) { 17 | var md5 = crypto.createHash('md5'); 18 | var username = req.body.username; 19 | var password = md5.update(req.body.password).digest('base64'); 20 | 21 | AdminModel.findOne({ 22 | username 23 | }, function (err, data) { 24 | console.log(data) 25 | if (err) return err 26 | if (username == '' || password == '') { 27 | resDate.code = 0; 28 | resDate.message = '用户名或密码不能为空'; 29 | res.json(resDate); 30 | } else if (!data) { 31 | resDate.code = -1; 32 | resDate.message = '用户尚未注册'; 33 | res.json(resDate); 34 | } else if (data.password !== password) { 35 | resDate.code = -2; 36 | resDate.message = '密码输入错误'; 37 | res.json(resDate); 38 | } else if (data.username == username && data.password == password) { 39 | resDate.code = 1; 40 | resDate.message = '登录成功'; 41 | resDate.userInfo = { 42 | _id: data._id, 43 | username: data.username 44 | } 45 | res.json(resDate); 46 | } 47 | }) 48 | }) 49 | 50 | router.post('/register', function (req, res, next) { 51 | var md5 = crypto.createHash('md5'); 52 | var username = req.body.username; 53 | var password = md5.update(req.body.password).digest('base64'); 54 | var userInfo = new AdminModel({ 55 | username: username, 56 | password: password 57 | }) 58 | 59 | if (username == '' || password == '' || req.body.re_password == '') { 60 | resDate.code = 0; 61 | resDate.message = '用户名或密码不能为空'; 62 | res.json(resDate); 63 | } else if (req.body.password === req.body.re_password) { 64 | AdminModel.findOne({ 65 | username 66 | }, function (err, data) { 67 | if (err) return err; 68 | if (data !== null) { 69 | resDate.code = -3; 70 | resDate.message = '该用户已被注册'; 71 | res.json(resDate); 72 | } else { 73 | userInfo.save(function (err, data) { 74 | if (err) return err; 75 | resDate.code = 2; 76 | resDate.message = '注册成功'; 77 | res.json(resDate); 78 | }) 79 | } 80 | }) 81 | } else { 82 | resDate.code = -4; 83 | resDate.message = '两次密码输入不一致'; 84 | res.json(resDate); 85 | } 86 | }) 87 | 88 | module.exports = router; --------------------------------------------------------------------------------