【聚搜云】(www.4526.cn)是上海聚搜信息技术有限公司旗下品牌,坐落于魔都上海,服务于全球、2019年成为阿里云代理商生态合作伙伴。与阿里云代理商、腾讯云、华为云、西部数码、美橙互联、AWS亚马逊云国际站代理商、聚搜云,长期战略合作的计划!阿里云国际站代理商专业的云服务商!
参照网上的例子,以一个用户登录的模拟场景开发三个接口,前端调用接口成功即可 接口分别为:
获取所有用户列表
根据identity删除用户信息
创建新的用户
后端使用node + express开发,数据库使用mysql,前端使用vue框架
建立数据库
本地下载安装mysql,同时安装mysql workbench,可视化管理数据库
打开mysql workbench,建立本地连接,一般默认首页会出现本地连接,直接点击会要求输入密码即可连接,密码在安装mysql的时候应该是有要求设置的。没有本地连接的话点击新建按钮,输入hostname,username(一般默认是root),port(默认是3306),点击ok,首页列表中便会出现刚新建的本地连接,点击后输入密码即可连接
3. 进入本地连接后默认可以看到一个名称为sys的数据库,这里我将所有的默认数据库全都清掉(右键-"drop schema"),新建一个名为users的数据库(schema),默认会有Tables、Views、Stored Procedures、Functions四个子项,选中Tables,右键-"create table"创建新的表user
也可以选择create table like,内置三种类型的表timestamps,user,category,这里选择user类型,则界面如图
默认有username,email,password,create_time四个属性,username和password不为空(not null),一般需要设置一个主键(PK),这里新增一个属性identity,dataType设为INT,并设为自增(AI),新建数据时自增的属性不用赋值,会自动加1填充(只有INT类型才能勾选自增)
4. 表新建完成后,要增加数据可以选中该表,右键-"select rows - limit 1000",右侧可以看到表内容,在表中NULL处填入对应数据即可,至此,数据库相关准备已完成
创建node项目
全局安装express
express 项目名(此处为login)
2. 初始化项目
进入要保存项目的目录文件夹,
express 项目名(此处为login)
生成的目录结构如下:
目录中/bin/www为入口文件,注意此时虽然package.json中有许多依赖,但它们尚未安装,执行
npm install
3. 项目中安装mysql
npm install --save mysql
4. 连接mysql数据
在项目根目录下新建conf/mysqlConf.js,封装mysql配置及连接代码,连接时通过database字段设置默认的数据库为users,当然也可以不设置
const mysql = require('mysql')
const mysqlConfig = {
connectionLimit: 10,
host: '121.43.33.208',
user: 'root',
password: '19931016dean',
database: 'users'
}
const pool = mysql.createPool(mysqlConfig)
module.exports = {
pool
}
5. 管理mysql数据
新建文件夹/models/,该文件夹专门处理mysql数据库,新建文件夹users,对应users数据库
新建配置文件usersSql.js,用于封装mysql操作语句
module.exports = {
addUser: 'insert into users.user (username, cipher, email) values (?, ?, ?)',
deleteUser: 'delete from users.user where identity = ?',
queryUser: 'select * from users.user where identity = ?',
queryUsers: 'select * from users.user'
}
新建文件users.js,封装操作mysql数据库的函数,其分别是与上述操作语句对应的
const { pool } = require('../../conf/mysqlConf.js')
const {
addUser,
deleteUser,
queryUser,
queryUsers,
} = require('./usersSql.js')
module.exports = {
add: function (user, callback) {
const sqlParams = [
user.username || '',
user.cipher || '',
user.email || '',
]
pool.query(addUser, sqlParams, function (error, result) {
if (error) {
throw error
}
callback(result)
})
},
deleted: function (params, callback) {
const { identity } = params
const sqlParams = [identity]
pool.query(deleteUser, sqlParams, function (error, result) {
if (error) {
throw error
}
callback(result)
})
},
query: function (params, callback) {
const { identity } = params
const sqlParams = [identity]
pool.query(queryUser, sqlParams, function (error, result) {
if (error) {
throw error
}
callback(result[0])
})
},
queryAll: function (callback) {
pool.query(queryUsers, null, function (error, result) {
if (error) {
throw error
}
callback(result)
})
}
}
6. 封装express路由代码
在routes文件夹下新建user.js,代码如下:
const express = require('express')
const router = express.Router()
const { add, deleted, query, queryAll } = require('../models/users/users.js')
router.get('/', function(req, res, next) {
res.send('users', {
title: 'usersApi',
apiList: [
{
url: 'users/adduser',
method: 'post',
params: {
username: '用户名称',
cipher: '密码',
email: '邮箱',
},
result: {
success: true,
data: '',
},
},
{
url: 'users/deleteuser',
method: 'get',
params: {
identity: '用户identity',
},
result: {
success: true,
data: '',
},
},
{
url: 'users/queryuser',
method: 'get',
params: {
identity: '用户identity',
},
result: {
success: true,
data: {
identity: '53554645',
username: '用户名称',
cipher: '密码',
email: '邮箱',
},
}
}
]
})
})
router.post('/adduser', function (req, res, next) {
const urlParams = req.body
add(urlParams, function (result) {
res.json(result)
})
})
router.get('/deleteuser', function (req, res, next) {
const urlParams = {
identity: req.query.identity
}
deleted(urlParams, function (result) {
res.json(result)
})
})
router.get('/queryuser', function (req, res, next) {
const urlParams = {
identity: req.query.identity
}
query(urlParams, function (result) {
res.json(result)
})
})
router.get('/queryusers', function (req, res, next) {
queryAll(function (result) {
res.json(result)
})
})
module.exports = router
此处定义了不同接口地址对应的处理方法,如'/queryusers'请求时,使用queryAll方法,即对应的查询数据库users所有数据的操作
7. 启动服务
npm start
部署
准备工作
之前已经购买阿里云服务器并安装了nginx,该流程可前往阿里云服务器使用流程查看
在阿里云服务器上安装node
打开Xshell,连接到阿里云服务器,下载node压缩包,具体node版本可以到官网去查找
[root@iZbp132ol31nc3v7nvumh7Z ~]# wget https://nodejs.org/dist/v16.13.0/node-v16.13.0-linux-x64.tar.xz
解压
[root@iZbp132ol31nc3v7nvumh7Z ~]# tar xf node-v16.13.0-linux-x64.tar.xz
建立软连接,软连接的作用类似于快捷方式,可以为某一个文件在另外一个位置建立一个不同的链接,把解 压的node连接到/usr/local/bin/node,相当于可以在/usr/local/bin/node访问到node,这样便可以全局使用node命令
[root@iZbp132ol31nc3v7nvumh7Z ~]# ln -s /root/node-v16.13.0-linux-x64/bin/node /usr/local/bin/node
[root@iZbp132ol31nc3v7nvumh7Z ~]# ln -s /root/node-v16.13.0-linux-x64/bin/npm /usr/local/bin/npm
2. 在阿里云服务器上安装mysql
[root@iZbp132ol31nc3v7nvumh7Z ~]# wget https://repo.mysql.com//mysql80-community-release-sl15.rpm
[root@iZbp132ol31nc3v7nvumh7Z ~]# rpm -ivh mysql80-community-release-sl15.rpm
[root@iZbp132ol31nc3v7nvumh7Z ~]# yum install mysql-server
[root@iZbp132ol31nc3v7nvumh7Z ~]# yum install mysql-devel
安装完成后需输入用户名和密码登录
修改密码
[root@iZbp132ol31nc3v7nvumh7Z ~]# update user set password=PASSWORD('123456') where user='root'
登录
mysql -uroot -p
2. 将本地数据库的数据复制到阿里云服务器的数据库中
打开mysql workbench,新建连接,填入阿里云服务器公网ip和其mysql用户密码进行连接,成功后将本地数据库导出,如下
切换到阿里云服务器的连接,将刚才本地导出的sql文件导入,如下
刷新可以看到阿里云服务器数据库中已有了本地数据
3. 将node项目和前端代码上传到阿里云服务器
使用Xftp上传即可
4. 开启node服务
进入node项目地址,npm start即可开启服务
[root@iZbp132ol31nc3v7nvumh7Z ~]# cd /root/APPs/login-server
[root@iZbp132ol31nc3v7nvumh7Z ~]# npm start
由于本项目node服务监听的端口是3000,mysql默认端口是3306,因此还需到阿里云服务器安全组开启这两个端口
5. 访问前端页面
打开浏览器,输入阿里云服务器公网地址 + 项目路径,nginx需事先配好根目录访问路径,可以看到接口请求也是成功的
6. pm2工具
整个项目部署完成,访问成功,但这种方式开启node服务后不可关闭终端,也没法在终端中进行其他操作,每次访问前端页面都必须先开启node服务。要令服务长期开启,还需安装其他工具 此例安装pm2
[root@iZbp132ol31nc3v7nvumh7Z ~]# npm install -g pm2
[root@iZbp132ol31nc3v7nvumh7Z ~]# ln -s /root/node-v16.13.0-linux-x64/bin/pm2 /usr/local/bin/
然后通过以下命令开启node服务即可
[root@iZbp132ol31nc3v7nvumh7Z ~]# pm2 start ./bin/www