express搭建后台

基础项目搭建
1、全局安装express以及脚手架工具
  npm install express -g
  npm install express-generator -g

2、cd到想要建立文件夹的上一层文件夹,express会创建一个文件夹 ‘项目名称’。运行
  express '项目名称'

 

  会出现除了node_modules之外的项目结构
3、执行npm install 安装依赖包 node_modules会自动出现的(新手看,大佬自动屏蔽这个东西)

  执行npm install mysql 安装MySQL

4、在/bin/www文件下查看配置文件
5、npm start 启动项目 默认情况下localhost:3000为访问入口

项目配置信息自定义
  这个完成自定义之后的文件夹结构(基本完整的结构)

   1、bin/www文件中可以设置服务相关,域名端口等

  1 #!/usr/bin/env node
  2 
  3 /**
  4  * Module dependencies.
  5  */
  6 
  7 var app = require('../app');
  8 var debug = require('debug')('node-serve: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 || '9527');
 16 //改变成自己电脑上的IP地址,也可以不用这个地方,只是为了好看
 17 var domain = '192.168.171.145'
 18 
 19 
 20 
 21 app.set('port', port);
 22 
 23 /**
 24  * Create HTTP server.
 25  */
 26 
 27 var server = http.createServer(app);
 28 
 29 /**
 30  * Listen on provided port, on all network interfaces.
 31  */
 32 
 33 // server.listen(port);
 34 
 35 server.listen(port, domain, () => {
 36   console.log(server.address());
 37   let host = server.address().address;
 38   let port = server.address().port;
 39   console.log("应用实例,访问地址为 http://%s:%s", host, port)
 40 });
 41 
 42 
 43 
 44 server.on('error', onError);
 45 server.on('listening', onListening);
 46 
 47 /**
 48  * Normalize a port into a number, string, or false.
 49  */
 50 
 51 function normalizePort(val) {
 52   var port = parseInt(val, 10);
 53 
 54   if (isNaN(port)) {
 55     // named pipe
 56     return val;
 57   }
 58 
 59   if (port >= 0) {
 60     // port number
 61     return port;
 62   }
 63 
 64   return false;
 65 }
 66 
 67 /**
 68  * Event listener for HTTP server "error" event.
 69  */
 70 
 71 function onError(error) {
 72   if (error.syscall !== 'listen') {
 73     throw error;
 74   }
 75 
 76   var bind = typeof port === 'string'
 77     ? 'Pipe ' + port
 78     : 'Port ' + port;
 79 
 80   // handle specific listen errors with friendly messages
 81   switch (error.code) {
 82     case 'EACCES':
 83       console.error(bind + ' requires elevated privileges');
 84       process.exit(1);
 85       break;
 86     case 'EADDRINUSE':
 87       console.error(bind + ' is already in use');
 88       process.exit(1);
 89       break;
 90     default:
 91       throw error;
 92   }
 93 }
 94 
 95 /**
 96  * Event listener for HTTP server "listening" event.
 97  */
 98 
 99 function onListening() {
100   var addr = server.address();
101   var bind = typeof addr === 'string'
102     ? 'pipe ' + addr
103     : 'port ' + addr.port;
104   debug('Listening on ' + bind);
105 }

  2、根目录下创建config文件夹,里面创建mysqlConfig.js文件,配置数据库连接相关

 1 const mysql = require('mysql')
 2 // import mysql from 'mysql';
 3 const mysql_config = {
 4   connectionLimit: 10, // 最大连接数
 5   host: '127.0.0.1', // 本地搭建则本机ip,远程服务器则远程服务器ip 
 6   post: '3306',
 7   user: 'root', // mysql 账户
 8   password: 'root123', // mysql 密码
 9   database: 'management_system' // 要操作的数据库// 这里等数据库创建之后放开就可以
10 };
11 const pool = mysql.createConnection(mysql_config);
12 pool.connect((err) => {
13   if (err) throw err
14   console.log('database connect success...')
15 })
16 
17 // let sql = 'select * from sys_menu';
18 // pool.query(sql, (err, result) => {
19 //   if (err) throw err
20 //   console.log(result)
21 // })
22 
23 module.exports = {
24   pool
25 }

  3、创建service文件夹
    文件夹中可以创建sql文件夹用来存放sql文件,毕竟当sql语句很多的时候统一存放方便迭代
    创建serviceDao文件夹用来存放各自业务相关的逻辑代码
    比如查询菜单信息的接口 menuService.js

 1 const { pool } = require('../../config/mysqlConfig')
 2 module.exports = {
 3   query: function (params, callback) {
 4     let sql = 'select * from sys_menu';
 5     pool.query(sql, (err, result) => {
 6       if (err) throw err
 7       callback(result);
 8     })
 9   }
10 }

  4、在route文件夹下创建需要的接口访问,举例:和菜单相关的放在新创建的menu.js文件里

 1 const express = require('express');
 2 const router = express.Router();
 3 const { query } = require('../service/serviceDao/menuServe')
 4 
 5 router.get('/getMenuList', (req, res, next) => {
 6   let params = req.query
 7   query(params, function (success) {
 8     res.json({
 9       code: 200,
10       data: success
11     })
12   })
13 })
14 
15 module.exports = router

 

  

  5、在app.js文件中引用相关配置信息
    1)mysqlConfig文件引入

     1 require('./config/mysqlConfig') 

    2)业务代码引入

     1 var menuRouter = require('./routes/menu') 

     2 app.use('/menu', menuRouter) 

    3)能做的自定义处理很多,到这里基本上就完成了必须的自定义

 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 
 7 // var indexRouter = require('./routes/index');
 8 // var usersRouter = require('./routes/users');
 9 
10 require('./config/mysqlConfig')
11 
12 var app = express();
13 
14 // view engine setup
15 app.set('views', path.join(__dirname, 'views'));
16 app.set('view engine', 'jade');
17 
18 app.use(logger('dev'));
19 app.use(express.json());
20 app.use(express.urlencoded({ extended: false }));
21 app.use(cookieParser());
22 
23 
24 //配置项目启动的时候加载的静态文件位置
25 // app.use(express.static(path.join(__dirname, 'test')));
26 app.use(express.static(path.join(__dirname, 'testDemo')));
27 
28 
29 //配置从vue中打包过来的前端项目
30 // const fs = require('fs')
31 // app.get('*', function (req, res) {
32 //   const html = fs.readFileSync(path.resolve(__dirname, './test/index.html'), 'utf-8')
33 //   res.send(html)
34 // })
35 
36 
37 var meuuRouter = require('./routes/menu')
38 app.use('/menu', meuuRouter)
39 
40 
41 
42 
43 
44 // app.use('/', indexRouter);
45 // app.use('/users', usersRouter);
46 
47 // catch 404 and forward to error handler
48 app.use(function (req, res, next) {
49   next(createError(404));
50 });
51 
52 // error handler
53 app.use(function (err, req, res, next) {
54   // set locals, only providing error in development
55   res.locals.message = err.message;
56   res.locals.error = req.app.get('env') === 'development' ? err : {};
57 
58   // render the error page
59   res.status(err.status || 500);
60   res.render('error');
61 });
62 
63 module.exports = app;

  6、运行npm start 启动项目
    在地址栏输入对应接口的路径就能访问数据库里面的信息了
    比如 http://192.168.2.82:9527/menu/getMenuList
    需要注意的是因为编写的时候用路由将不同业务分开了,因此在地址栏里面访问接口的时候需要加上路由信息

    geMenuList是获取所有菜单信息的接口,因此访问的时候在地址栏加上路由信息之后应该是 menu/getMenuList

 

结合vue项目打包之后发布
  npm run build 之后生成静态文件包
  1、将包放在node服务根目录下
  2、在app.js中配置项目启动的时候读取的页面信息

1 //配置项目启动的时候加载的静态文件位置
2 // app.use(express.static(path.join(__dirname, 'test')));
3 app.use(express.static(path.join(__dirname, 'testDemo')));

 

  此时设置读取vue打包过来的包
  3、也可以直接不做设置直接将vue包里面的文件放到原来有的pubic文件夹下
  4、npm start就行了
  5、访问的时候访问的是服务器上的域名端口哦

 

posted @ 2020-07-09 16:23  但丿行好事  阅读(582)  评论(0编辑  收藏  举报