Express篇-后台框架, PM2

Express

是nodejs最常用的web server框架

1.安装与配置

  • 使用脚手架安装 npm i express-generator -g

  • 创建项目 express 项目名称

  • 安装依赖 npm i cross-env nodemon inspect --save-dev

  • 配置命令

"dev": "cross-env NODE_ENV=develop --port=8087 nodemon --inspect=9331  ./bin/www",
"prd": "cross-env NODE_ENV=production --port=8087 ./bin/www"
  • 启动项目 npm run dev

2.app.js

const createError = require('http-errors');   // 错误处理
const express = require('express');   // 引入express
const path = require('path');  // 引入路径模块
const cookieParser = require('cookie-parser'); //引入cookie解析工具
const logger = require('morgan');  // 引入 日志处理
const session = require('express-session')  
// 1.  引用路由
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const bookRouter = require('./routes/book');
// 使用express
const app = express();
// 创建视图  view engine setup
app.set('views', path.join(__dirname, 'views')); // 路径
app.set('view engine', 'jade');   //静态页面输出格式jade
// 使用中间件
app.use(logger('dev'));    // 开发日志相关处理
app.use(express.json());    // 处理JSON格式的POST请求数据 
app.use(express.urlencoded({ extended: false }));  //处理非JSON格式的POST请求数据
app.use(cookieParser()); // cookie解析
app.use(express.static(path.join(__dirname, 'public'))); // 处理静态资源  图片,js,样式

// 2. 注册路由 提供一个前缀    '/' 访问对应路径的前缀      类似 indexRouter(req).then()
app.use('/', indexRouter);
app.use('/users', usersRouter);  
app.use('/books', bookRouter);

// 路由不存在/错误处理  catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// 错误处理  error handler
app.use(function(err, req, res, next) {
  // 返回错误信息  set locals, only providing error in development
  res.locals.message = err.message;
	// 是开发环境返回错误信息 否则返回{}
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  // 返回状态码  render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
// index.js
// 引用路由
var express = require('express');
//创建路由
var router = express.Router();    
// 设置路由
/*GET请求(路径, next中间件,向后访问 )  GET home page. */
router.get('/', function(req, res, next) {
	// 页面模板渲染    'index'对应view/index.jade
  res.render('index', { title: 'Express' });
	// 不使用模板渲染,直接发送
  // res.send('给前台做出响应');
});

module.exports = router;

3.路由

  • 创建路由 users.js

// 引用路由
var express = require('express');
//创建路由
var router = express.Router();    
// 设置路由   GET请求(路径, next中间件,向后访问 )  GET home page.
router.get('/', function(req, res, next) {
  // 页面模板渲染    'index'对应view/index.jade
  res.render('index', { title: 'Express' });
  // 不使用模板渲染,直接发送
  // res.send('给前台做出响应');
});
module.exports = router;
  • app.js中引用并注册路由

const usersRouter = require('./routes/users');
app.use('/users', usersRouter);  

4.记录访问日志

https://github.com/expressjs/morgan

方式1:access(访问)的日志,使用morgan记录

方式2: 使用pm2自带日志记录功能

// 日志 写入方式1: 手动添加    方式2: 使用pm2, 配置完成可自动记录日志
// 判断开发模式
const env = process.env.NODE_ENV
if(env === 'production'){
  // 生产环境
  const filePath = path.resolve(__dirname,'logs','access.log')
  const ws = fs.createWriteStream(filePath,{flags: 'a'})
  app.use(logger('combined',{
    immediate: true,
    stream: ws
  }))
} else{
  app.use(logger ('dev'))
}

4.PM2部署后台项目

(1)特点

  • 进程守护, 系统崩溃自动重启

  • 启动多进程, 充分利用CPU资源

  • 自带日志记录功能

(2)使用

  • 下载 npm i pm2 -g

  • 配置启动命令pm2 start: "prd": "cross-env NODE_ENV=production --port=8087 pm2 start ./bin/www"

  • 启动项目 npm run prd

  • 配置(bin/pm2.conf.json)

{
  "apps":{
    "name": "db",          
    "script": "bin/www",
    "instances": 1,
    "ignore_watch":[
      "node_modules",
      "logs"
    ],
    "out_file": "logs/access.log",
    "err_file": "logs/error.log",
    "log_date_format": "YYYY-MM-DD HH:mm Z"
  }
}
  • 修改启动配置

 "prd": "cross-env NODE_ENV=production --port=8087 pm2 start ./bin/pm2.conf.json"
  • pm2常用命令

命令名称

命令

启动

pm2 start www.js或配置文件(xx.json)

停止

pm2 stop 全部停止 / pm2 stop / 停止某个

删除

pm2 delete /

重启

pm2 restart /

查看列表

pm2 list

查看信息

pm2 info /

5.Session模块

安装并引用 npm i express-session --save

const session = require('express-session')  

// 设置session(安装并导入, 写在格式处理中间件之后 )
app.use(session({
  secret : "itmm_0521",  // 设置加密字符
  cookie : {
    path : '/',   //   设置cookie的携带路径路径
    httpOnly: true,  // 只读(浏览器端只读, 服务器端可操作)
    maxAge: 60 * 1000      //最大有效期 ms
  },
  // 设置令牌                                                   name : 'token'
}))

6.解决跨域问题

(1)设置请求头的方式

可在app.js使用路由前设置

// 设置请求头, 解决跨域
app.all('*', function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin','*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST');  
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization');  
  // res.setHeader("Content-Type", "application/json;charset=utf-8"); 
  next();
});

(2)使用cors的方式

安装并导入cors模块, 作为中间件处理

//npm i cors --save 
const cors = require('cors')
app.use(cors())

7.关于安装Express时的问题

在安装时出现如下 错误

npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please
update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)

解决办法:

  • 以管理员身份运行PowerShell

  • 输入set-ExecutionPolicy RemoteSigned

  • 选A

  • 输入get-ExecutionPolicy

  • 使用cnpm安装脚手架cnpm install express-generator -g

  • 进入项目目录,安装依赖,并启动项目

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mteee.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值