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、访问的时候访问的是服务器上的域名端口哦