前言:
本项目github地址:https://github.com/kaiqiangren/VueExpress
由于是自己尝试搭建的一个简单的nodejs+vue全栈项目,适用于初探nodejs后端领域的前端er。
本文的mysql部分需要参考另一篇文章: Express+Vue+mysql实践
进程守护及负载均衡相关可查看:https://blog.csdn.net/qq_24182885/article/details/81975438
注:mysql版本为5.7,最新版本的mysql 8.0+会与此项目有冲突。解决办法可看
MAC的mysql下载链接:https://pan.baidu.com/s/1r_gAPAXs9GpJ5g2DrAGg7A 密码:qlnh
https://blog.csdn.net/lr123838/article/details/80505529
https://blog.csdn.net/DA_learner/article/details/80202190
正文:
一、安装nodejs
这个步骤请自行搜多百度经验,进行安装,当下nodejs已经无需配置环境变量,所以请大家下载下来直接开包即用即可。
二、初始化前端项目
1、安装vue
npm install vue-cli -g //这个是将vue脚手架进行全局安装。
npm install @vue/cli -g //vue-cli3脚手架,安装此脚手架会更改创建项目命令,也可通过桥接npm包来保持vue2的命令
2、初始化vue项目(进入自己本地的文件夹)
vue-cli2: vue init webpack '项目名(任意)' //等待npm包初始化后,进行下一步
vue-cli3: vue create 'projectName' //可自定义或者使用默认配置 具体参考vue-cli3搭建项目
npm install pm2 -g //使用pm2命令,进行负载均衡及进程守护
3、安装express、mysql
npm install express
npm install mysql
4、项目结构
5、搭建nodejs服务器
数据库连接池部分:
/**
* Created by renka on 2018/8/10.
*/
const mysql = require("mysql");
//连接上数据库(连接池)
const pool = mysql.createPool({
host : 'localhost',
user : 'root',
password : '123456',
database:'test'
});
/*封装数据库操作方法query--用于增删改查*/
const query=function(sql,sqlParams,callback){
pool.getConnection(function(err,conn){
if(err){
callback(err,null,null);
}else{
conn.query(sql,sqlParams,function(qerr,vals,fields){
//释放连接
conn.release();
//事件驱动回调
callback(qerr,vals,fields);
});
}
});
};
/*模块输出*/
module.exports=query;
服务代码:
附上数据库表结构:
本地数据库名称 test1
表名称 user_info
表内部字段如下:
const express = require("express");
//定义路由级中间件
const router = express.Router();
//引入数据库连接池,防止数据库超过最大连接数
const query=require("./db/db");
/*
* 增删改查服务路由
* */
/*新增*/
router.use('/test/add', function (req, res) {
let sql ="INSERT INTO user_info (name,country,date,score) VALUES(?,?,?,?);";
let sqlParams = [
req.body.name,
req.body.country,
req.body.date,
req.body.score
];
query(sql,sqlParams,function (err,result) {
if(err){
res.json({
ok:false,
message:'创建失败!'
})
}else{
res.json({
ok:true,
id:result.insertId,
message:'创建成功!'
})
}
res.end();
})
});
/*删除*/
router.use('/test/delete', function (req, res) {
let delSql = 'DELETE FROM user_info where id='+req.body.id;
query(delSql,null, function(err, rows, fields) {
if(err){
res.json({
ok:false,
message:'删除失败!',
error:err
})
}else{
res.json({
ok:true,
message:'删除成功!'
})
}
res.end();
})
});
/*编辑*/
router.use('/test/edit', function (req, res) {
let editSql = 'UPDATE user_info SET name=?,country=?,date=?,score=? WHERE id ='+req.body.id;
let editSqlParams = [
req.body.name,
req.body.country,
req.body.date,
req.body.score
];
query(editSql,editSqlParams,function (err,result) {
if(err){
res.json({
ok:false,
message:'修改失败!'
})
}else{
res.json({
ok:true,
message:'修改成功!'
})
}
res.end();
})
});
/*查询*/
router.use('/test/query', function (req, res) {
let pageNumber = req.body.pageNumber;
let pageSize = req.body.pageSize;
let start = (pageNumber-1)*pageSize;
let end = pageNumber*pageSize;
let sql = "SELECT * FROM user_info ORDER BY score DESC LIMIT "+start+","+end;
let countSql = "SELECT COUNT(id) FROM user_info";
const promise = new Promise(function(resolve, reject) {
query(countSql,null,function (err, rows, fields) {
resolve(rows);
})
}).then((count)=>{
query(sql, function(err, rows, fields) {
if(err){
res.json({
ok:false,
message:'查询失败!',
info:null
})
}else{
res.json({
ok:true,
message:'查询成功!',
info:rows,
total:count[0]["COUNT(id)"]
})
}
res.end();
});
})
});
/*将路由模块输出*/
module.exports = router;
6、前端nodejs服务器
7、本地调试
pm2 start app.js -i max //启动本地后端服务器(多集群模式)
npm run dev //启动本地前端项目
pm2 start webServer.js //打包后,启动nodejs前端静态资源服务器(像nginx一样将dist文件夹作为静态资源使用)
pm2 list //查看当前运行的进程
pm2 stop all //停止所有进程运行
pm2 stop <App name> //单独停止1个进程
pm2 delete all //删除pm2 list中缓存的所有项目
pm2 delete <id> //根据id删除pm2 list中缓存的单独项目
8、部署上线(1台web服务器,1台nodejs服务器)
Nginx配置可以参考 : https://blog.csdn.net/qq_29480353/article/details/80048391
(1)Linux系统先安装nodejs,并配置全局变量,本地的虚拟机linux需要解开防火墙,否则无法进行测试
(2)将相关node_modules模块压缩,然后解压至Nodejs服务器上,使用ftp上传压缩包,然后用linux命令进行解压
(3)将相关node_modules模块压缩,然后解压至web服务器上,再上传dist文件夹至web服务器上,放到node_modules文件夹的同级目录下。
(4)使用SecureCRT或者xShell分别连接你的服务器,进入项目目录,
执行pm2 start app.js -i max(pm2启动配置文件) //启动nodejs服务
执行pm2 start webServer.js(你的前端服务器文件) //启动web服务器
9、总结
由于是第一次写这类文章,记录下自己对nodejs的探索之路,并针对探索之路,不断更新该文章,还请大家多多支持!