欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

node+pm2+express+mysql+sequelize来搭建网站和写接口

程序员文章站 2022-10-05 09:57:33
如和用node去搭建一个网站后台程序,通过pm2启动express程序,使用ejs作为前端显示模板,mysql数据库储存内容,squelize操作数据库更加的安全。里面的只是都是分开的,也就是说可以单独拿出来使用的东西 ......

前面的话:在这里已经提到了安装node的方法,node是自带npm的。

下面会教大家怎么去搭建一个后台应用。

npm i     //这个 i 是指install 安装

npm -g  //这个 -g是指全局安装

 

express介绍

基于 node.js 平台,快速、开放、极简的 web 开发框架

 

express安装

npm i -g express

安装的express版本是4.0的,现在直接输入express webtest,也会提示express不是内部命令,原因是最新express4.0版本中将命令工具分家出来了,所以我们还需要安装一个命令工具,命令如下:

npm i -g express-generator

express中文文档:

 

这里的话用的是ejs的模板去搭建,因为前端显示页面是做不分离的项目,但是后台管理的话是用vue全家桶去做,这里的后台搭建会在【vue三部曲】中的第二部讲到。

node+pm2+express+mysql+sequelize来搭建网站和写接口

按照这个下面的命令去做就可以了

cd webtest      //进入webtest文件夹

npm install     //安装所需依赖

npm start    //npm启动

express默认的端口是3000,在浏览器的地址栏打开,成功如下图显示

node+pm2+express+mysql+sequelize来搭建网站和写接口

 

express目录介绍

bin/www

这里几个执行的方法就不介绍了

// 表明是node可执行文件
#!/usr/bin/env node

// 引入上面导出的app实例
var app = require('../app');

// 引入debug模块,打印调试日志
var debug = require('debug')('blog:server');
var http = require('http');

// 设置端口号
var port = normalizeport(process.env.port || '3000');
app.set('port', port);

// 启动工程
var server = http.createserver(app);

// 监听端口号
server.listen(port);
server.on('error', onerror);
server.on('listening', onlistening);

 

app.js

// 生成一个express实例app
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieparser = require('cookie-parser');
var bodyparser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

// 设置views文件夹为存放视图文件的目录,即存放模板文件的地方
// dirname为全局变量,存储当前正在执行的脚本所在的目录
app.set('views', path.join(__dirname, 'views'));
// 设置模板引擎为ejs
app.set('view engine', 'ejs');


// 加载日志中间件
app.use(logger('dev'));

// 加载解析json的中间件
app.use(bodyparser.json());

// 加载解析urlencoded请求体的中间件
app.use(bodyparser.urlencoded({ extended: false }));

// 加载解析cookie的中间件
app.use(cookieparser());

// 设置public文件夹为存放静态文件的目录
app.use(express.static(path.join(__dirname, 'public')));

// 路由控制器
app.use('/', index);
app.use('/users', users);

// 捕获404错误,并转发到错误处理器
app.use(function(req, res, next) {
  var err = new error('not found');
  err.status = 404;
  next(err);
});

// 盛传环境下的错误处理器,将错误信息渲染error模板并显示到浏览器中
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  // 开发环境下的错误处理器,将错误信息渲染error模板并显示到浏览器中
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

// 导出app实例,供其他模块调用
module.exports = app;

rotues/index.js

// 生成一个路由实例用来捕获访问主页的get请求,导出整个路由并在app.js中通过app.use('/',routes);加载。
// 这样,当访问主页时,就会调用res.render('index',{title:'express'});渲染views/index.ejs模板并显示到浏览器中
var express = require('express');
var router = express.router();

/* get home page. */
router.get('/', function(req, res, next) {//首页路由
  res.render('index', { title: 'express' });//render  views视图目录下的index.ejs模板
});

// 导出路由实例
module.exports = router;

 

express安装好之后,该安装pm2了,刚刚那个npm start肯定后面不会用的。这个命令可以在packge.json中看到是npm启动的方式,启动了bin/www这个文件。不用这个命令去启动是因为,需要启动窗口一直开着,而且没有热更新,写完代码保存之后不会实施更新。好了,现在的话安装全局的pm2

 

pm2介绍

pm2是nodejs进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能jiank监控,自动重启,负载均衡等,而且使用是非常简单的。
当你要把你的独立代码利用全部的服务器上的所有 cpu,并保证进程永远都活着,0 秒的重载, pm2 是完美的。它非常适合 iaas 结构,但不要把它用于 paas 方案(随后将开发 paas 的解决方案)。

pm2主要特性

• 内建负载均衡(使用 node cluster 集群模块)
• 后台运行 。
• 0 秒停机重载,维护升级的时候不需要停机。
• 具有 ubuntu 和 centos 的启动脚本 。
• 停止不稳定的进程(避免无限循环)
• 控制台检测
• 提供 http api
• 远程控制和实时的接口 api ( nodejs 模块,允许和 pm2 进程管理器交互 )

 

npm官网的pm2包:https://www.npmjs.com/package/pm2

pm2安装
npm i pm2 -g

 

pm2常用参数

-watch //监听应用目录变化,一旦发生变化,自动重启。
-i -instances //启动多少个实例,可用于负载均衡,如果-i 0或 -i max,则根据当前机器核数来确定实例数目。
-ignore-watch//排查监听目录/文件,可以是特定文件名,也可以是正则。
-n -name//应用的名字,查看应用信息。
-o -output//标准输出日志文件路径
-e -error//错误日志文件输出

 

pm2常用命令

pm2 list //列出pm2中的所有程序

pm2 logs //列出当前所有程序的web的日志,可以带项目的id或者name,显示指定程序的日志

pm2 start bin\www   //pm2启动bin/www这个文件

pm2 stop 0//停止id为0的程序,这里不一定要用id也可以是项目名称name,然后可以带一个all停止全部程序

pm2 delete 0//删除id为0的程序,是删除在pm2中运行的程序,同理这里不一定要用id也可以是项目名称name,可以带一个all删除全部程序

pm2 reload 0 //重启id为0的程序,同理这里不一定要用id也可以是项目名称name,可以带一个all重启所有程序

pm2 startup //创建开机自启动命令

 

在这里说明一下,我一般喜欢使用 

pm2 start bin\www --name=webtest --watch
//--name是可以重命名程序显示的名字
//--watch是实时预览程序
//这一段代码比较长,可以把他放在package.json中的scripts中,用npm启动的方式去启动pm2程序

node+pm2+express+mysql+sequelize来搭建网站和写接口

 

好了基本工具已经介绍完了。现在开始启动嗨起来,对了还有一个 sequelize,同样的安装方式

squelize安装

npm i sequelize //安装之后引入使用可能会报mysql2的错,注意这里有个2,所以需要安装mysql2

npm i mysql2

squelize介绍

sequelize是一个基于promise的关系型数据库orm框架,这个库完全采用javascript开发并且能够用在node.js环境中,易于使用,支持多sql方言(dialect),。它当前支持mysql,、mariadb、sqlite、postgresql、sql server 数据库。

目前在node.js中,sequelize的关注度较高,用的也较多。

因为是基于promise规范,在调用后的处理上不再是callback方式,而是统一的链式调用方式,调用直观,易读。

 

 

开始

先把项目跑起来。

node+pm2+express+mysql+sequelize来搭建网站和写接口

 

为了方便,可以建公共的头部和底部使用include的方式把公共部分引入进来

node+pm2+express+mysql+sequelize来搭建网站和写接口

node+pm2+express+mysql+sequelize来搭建网站和写接口

node+pm2+express+mysql+sequelize来搭建网站和写接口

node+pm2+express+mysql+sequelize来搭建网站和写接口

 

 

 然后效果就是这样啦

node+pm2+express+mysql+sequelize来搭建网站和写接口

创建其他的路由页面

以下是官方的一些路由实例

以下是基于字符串的路径路径的一些示例。

此路由路径将匹配对根路由的请求,/。

app.get('/', function (req, res) {
  res.send('root')
})
此路径路径将匹配请求/about。

app.get('/about', function (req, res) {
  res.send('about')
})
此路径路径将匹配请求/random.text。

app.get('/random.text', function (req, res) {
  res.send('random.text')
})
以下是基于字符串模式的路径路径的一些示例。

此路径路径将匹配acd和abcd。

app.get('/ab?cd', function (req, res) {
  res.send('ab?cd')
})
这条路线的路径将会匹配abcd,abbcd,abbbcd,等等。

app.get('/ab+cd', function (req, res) {
  res.send('ab+cd')
})
这条路线的路径将会匹配abcd,abxcd,abrandomcd,ab123cd,等。

app.get('/ab*cd', function (req, res) {
  res.send('ab*cd')
})
此路径路径将匹配/abe和/abcde。

app.get('/ab(cd)?e', function (req, res) {
  res.send('ab(cd)?e')
})
基于正则表达式的路径路径示例:

此路径路径将匹配其中包含“a”的任何内容。

app.get(/a/, function (req, res) {
  res.send('/a/')
})
这条路线的路径将匹配butterfly和dragonfly,但不butterflyman,dragonflyman等。

app.get(/.*fly$/, function (req, res) {
  res.send('/.*fly$/')
})

这个是express的地址:

我们都知道所有能访问的页面都是get请求,所以一般用于seo前端渲染的模板上都是通过get路由去访问的。

 

express写接口

在这里的话需要先安装mysql数据库了。可以去mysql官网下一个mysql环境,我的系统是win10 64的,所以的根据自己的系统和需要的mysql版本下载安装。这里有点尴尬,我忘了我是怎么装的了。。。大家可以搜一下win10安装mysql的教程,还是挺多的。

进入地址:下载mysql-8.0.11-winx64

node+pm2+express+mysql+sequelize来搭建网站和写接口

安装好后控制台输入

mysqll -u root -p //回车然后输入密码就可以了,需要注意的是,每次需要执行的mysql语句是要在结尾加上分号的。

或者大家也可以使用可视化工具,这里推荐的是navicat for mysql用着还是很舒服的,不过新手的话建议还是需要熟悉一下mysql语句的,比如我这种菜鸡。

菜鸟教程的mysql教程:

node+pm2+express+mysql+sequelize来搭建网站和写接口

show databases; //显示所有数据库
create database webtest;//创建名为webtest的数据库
use webtest;//选中webtest的数据库

好吧。我觉得我还是需要一个工具

node+pm2+express+mysql+sequelize来搭建网站和写接口

 

 node+pm2+express+mysql+sequelize来搭建网站和写接口

新建一个表,里面暂时是没有数据的。可以通过后面给出的方法做一个套增删该查

未完待续。。。各位晚安,剩下的可能要明天晚上回来补了,明天和女朋友出去一趟,嘻嘻。感觉自己写的文章内容好多。。。最大的原因主要还是看别人的文章的话内容太少了,然后需要或者通过这个技术衍生的其他技术文章还需要自己去查找,所以就想直接把一整套的教程给出了,我也是刚入门。。在门栏上。。。也算是给自己的一个笔记吧