因为不少朋友对于我上一篇写的CMS系统中后台node部分的启动有些不太理解的地方或者存在一些问题,这里我会专门写一下启动的步骤和细节,关于CMS全栈系统感兴趣的朋友能够看看我以前写的两篇文章:javascript
1.基于nodeJS从0到1实现一个CMS全栈项目(上)css
2.基于nodeJS从0到1实现一个CMS全栈项目(中)前端
本文主要介绍以下内容:vue
文章很短,但愿你们能够更好的进行后面node和前端部分的开发。java
咱们能够去redis官网下载redis安装程序,我主要介绍window和 linux系统下的安装,若是你是其余系统,能够去官网查看相关资料。node
下载地址:github.com/MSOpenTech/…react
Redis 支持 32 位和 64 位。这个须要根据你系统平台来选择,下载压缩包到 C 盘,解压而后将文件夹重命名为 redis。(这里方便记忆)linux
redis-server.exe redis.windows.conf
复制代码
输入以后,若是显示以下界面,说明启动成功:css3
这样启动尚未完,若是咱们想测试redis是否能够执行,咱们上面启动的cmd窗口千万不能关,不然咱们跑node将会出现以下报错:nginx
好了,咱们继续,测试一下redis是否可用。首先咱们新建一个cmd窗口,切换到 redis 目录下运行:
redis-cli.exe -h 127.0.0.1 -p 6379
复制代码
设置键值对:
set user xxx
复制代码
则会出现以下结果:
这样,redis启动这块就能够了。
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make
复制代码
make完后 redis-2.8.17目录下会出现编译后的redis服务程序redis-server,还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下,下面启动redis服务:
$ cd src
$ ./redis-server
复制代码
而后下面使用redis-cli的方式和window相似,这里就不举例子了,若是想详细了解redis的配置和启动,请认真研读redis官方文档。
关于node的编译和配置我在上一篇也简单讲了一下,这里咱们具体介绍如何启动项目和打包线上和发开环境代码。
首先咱们看看package.json的执行代码:
"scripts": {
"start": "export NODE_ENV=development && nodemon -w src --exec \"babel-node src\"",
"build": "babel src --out-dir dist",
"run-build": "node dist",
"test": "echo \"Error: no test specified\" && exit 1"
}
复制代码
咱们先看start,这里主要用来启动咱们开发环境的服务器,咱们经过export NODE_ENV=development来定义开发环境的环境变量,因为我采用的是mac电脑,因此能够用export来定义一个node环境变量;
window下咱们采用set NODE_ENV=development来定义。咱们用以下指令来启动:
npm start
// or yarn start
复制代码
其次咱们看看build命令,主要是打包输出的命令,dist为输出的目录名,你也能够根据本身代码风格来命名。
咱们执行以下来打包:
npm run build
// or yarn build
复制代码
run-build命令是我额外加的,主要是方便测试生产环境的代码,即咱们打包的后代码。执行方式同上。
关于如何使用环境变量,这里咱们能够参考我项目中的config下的代码:
const isDev = process.env.NODE_ENV === 'development';
//获取本机ip地址
function getIPAdress() {
var interfaces = require('os').networkInterfaces();  
for (var devName in interfaces) {    
var iface = interfaces[devName];      
for (var i = 0; i < iface.length; i++) {
var alias = iface[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
return alias.address;
}
}  
}
}
const IP = getIPAdress();
const staticPath = isDev ? `http://${IP}:3000` : '线上地址';
module.exports = {
isDev,
staticPath
}
复制代码
咱们可使用process.env.NODE_ENV来拿到咱们在package下定义的环境变量,而后进行不一样的操做。以上代码主要做用就是下其余业务代码传递环境变量,并对静态路径根据不一样环境使用不一样的ip地址,方便先后端调试。
当咱们启动好服务器后,咱们能够利用ip去测试端口,因为咱们初始化时会初始化config和admin数据,因此咱们可使用postman来测试接口可靠性,为了方便理解,我会剖出初始化代码,若是有不理解的,能够可和交流。
// server/src/db/schema/config.js
// ...
// 初始化config数据
async function initConfig(){
const isExist = await configSchema.exists()
if(!isExist) {
const result = await configSchema.hmset(null, {
header: {
columns: ['首页'],
height: '50',
backgroundColor: '#000000',
logo: ''
},
banner: {
type: '1', // 0为标签云,1为轮播图
label: [],
bgUrl: '',
bannerList: []
},
bannerSider: {
tit: '侧边栏信息',
imgUrl: '',
desc: ''
},
supportPay: {
tit: '',
imgUrl: ''
}
})
if(!Array.isArray(result)) {
console.log('配置信息初始化完成')
}else {
throw result
}
}
}
initConfig()
复制代码
咱们在server/src/db/schema/config.js下能够看到这段初始化config的代码,接下来看看路由定义:
综上咱们服务器启动的流程以下:
因为今天搬家,时间没有安排出来,明天将推出服务端剩下的部分,CMS全栈的管理后台和客户端部分的实现。包括:
项目完整源码地址我会在十一以前告诉你们,欢迎在公众号《趣谈前端》加入咱们一块儿讨论。