express之安装及登录相关插件

node 环境

安装

地址

查看是否安装成功

node -v
淘宝镜像
npm set registry https://registry.npm.taobao.org/
express

安装

npm install express --save

创建

express project (项目名称)

查看

cd project
npm i
npm start // 查看 http://localhost:3000/

目录

..
│  app.js
│  package.json
│  
├─bin
│      www
│      
├─public
│  ├─images
│  ├─javascripts
│  └─stylesheets
│          style.css
│          
├─routes
│      index.js
│      users.js
│      
└─views
        error.jade
        index.jade
        layout.jade

app.json

{
  "name": "project",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    // cookie解析
    "cookie-parser": "~1.4.4",
    // 调试
    "debug": "~2.6.9",
    "express": "~4.16.1",
    // 根据传入的http状态码,生成对应的HTTP error
    "http-errors": "~1.6.3",
    // 模板引擎
    "jade": "~1.11.0",
    // 默认日志
    "morgan": "~1.9.1"
  }
}

根据需求删除不要的文件夹及依赖

// 依赖卸载
npm uninstall ****

加入 controllersmodels 文件夹

routes 引入并使用 controllers

import { userLogin } from '../controllers/users.js';

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/login',  userLogin);

module.exports = router;

创建 helps

├─helps
│  ├─db.js  // 数据库
│  ├─res_json.js // 封装返回 res.json()
│  └─res_msg.js  // 封装 res.json 返回的 code msg
支持 import
// 下载依赖
npm i babel-register babel-preset-env --save-dev

// 在./bin/www文件第一行加入
require('babel-register')({
  presets: ['env']
});
登录
npm 地址

官方地址

安装 request
npm i request
安装 pm2

pm2是一个进程管理工具,可以用它来管理你的node进程

npm install -g pm2
安装 jsonwebtoken express-jwt
// npm i --save-dev jsonwebtoken express-jwt

// config.js 设置 expiretime, secret
module.exports = {
    "jwt_expiretime": 36000,
    "jwt_secret": "sfsffewfssgs",
}

// 在 app.js 中设置
app.set('secret', config.jwt_secret)
app.set('secret_expiretime', config.jwt_expiretime);

// 生成token
var token = jwt.sign({
    exp: Math.floor(Date.now() / 1000) + app.get('secret_expiretime'),
    open_id
}, app.get('secret'));

// 解析
jwt.verify(token, app.get('secret'), async (err, decoded) => {
    if(err) {
        // 出错
    } else {
        // 成功
    }
})

限制 api

// jwt中间件
app.use(function (req, res, next) {
  if (
      req.originalUrl.indexOf('/users/login') >= 0
  ) {
      return next()
  }
  // console.log(req.token, 'no token')
  // var token = req.token
  // if (!token) {
  //     console.log('no token')
  // }

  // jwt.verify(token, app.get('secret'), async (err, decoded) => {
  //     if (err) {
    
  //     } else {
    
  //     }
  // })

})
express-bearer-token

承载令牌中间件

如果找到令牌,它将存储在上 req.token

const bearerToken = require('express-bearer-token');

app.use(bearerToken());

前端 header 配置

header: {
  'Authorization': 'Bearer ' + token
},

地址

cors
npm i cors


var cors = require('cors');

app.options('*', cors());
app.use(cors());
mysql-pro mariadb
npm install mysql-pro
npm i mariadb
express-session
// npm install express-session
multer
npm install --save multer


router
    .post('/', multer({
        //设置文件存储路径
        dest: 'public/uploads'
    }).single('file'), function (req, res, next) {
        if (req.file.length === 0) {
            //判断一下文件是否存在,也可以在前端代码中进行判断。
            res_fail(res, API_EMPTY_UPLOAD);
            return
        } else {
            let file = req.file;
            let fileInfo = {};
            let newFile = Date.now() + "_" + file.filename + '.' + file.mimetype.replace('image/', '');
            fs.renameSync('./public/uploads/' + file.filename, './public/uploads/' + newFile);
            // 获取文件信息
            fileInfo.mimetype = file.mimetype;
            fileInfo.originalname = file.originalname;
            fileInfo.size = file.size;
            fileInfo.path = file.path;
            // 设置响应类型及编码
            // res.set({
            //     'content-type': 'application/json; charset=utf-8'
            // });
            res.send(newFile);
        }
    });
二维码生成

github

npm install qr-image

router.get('/', function(req, res) {
    var text = '***';
    var img = qr.image(text,{size :10});
    res.writeHead(200, {'Content-Type': 'image/png'});
    img.pipe(res);
});


<image src="https://www.moozixiao.club/qrimage" mode="widthFix" ></image>
使用 async-await
// 下载
npm i babel-plugin-transform-runtime -D
// 创建配置 .babelrc
{
    "plugins": [
    	"transform-runtime"
	]
}

github 中文地址

用户信息

一开始时,在考虑都拿到了 openid 和 session_key 了,那用户信息呢,怎么没有用户信息,之后了解到原来用户信息其实是在用户那边授权的时候,已经发了过来了,存在了 encryptedData 中,

而我们需要做的就是 解密,那怎么去解密呢,其实 官方文档 已经给我们提供了解密方式(官方地址),可以去下载,然后使用。

下载后的文件

..
│  tree.txt
│  
├─c++
│  ├─lib
│  │  ├─include32
│  │  │              
│  │  ├─include64
│  │  │              
│  │  ├─lib32
│  │  │      
│  │  └─lib64
│  │          
│  └─src
│          Makefile
│          Sample.cpp
│          WXBizDataCrypt.cpp
│          WXBizDataCrypt.h
│          
├─Node
│      demo.js
│      WXBizDataCrypt.js
│      
├─PHP
│      demo.php
│      errorCode.php
│      wxBizDataCrypt.php
│      
└─Python
        demo.py
        WXBizDataCrypt.py

官方地址

Bug
app.get is not a function

解决方法:

// 把 module.exports=app 提前到 require('./routes/index') 前面
var app = express();
module.exports = app;
Cannot read property ‘code’ of undefined (req.body.code )

由于把 app.use(router); 放到 app.use(bodyParser.json()); 前面而导致的问题

解决方法:

app.use(router); 放到最后

res.json 返回 json 成了字符串

情况:

返回:

res.json({
    code: 200,
    url: newFile
});

返回数据为:

data: "{"code":200,"message":"success","data":{"url":"moo_1591752800721.jpeg"}}"

解决方法:

// 返回的data是字符串形式
// 前端则需要使用 JSON.parse 进行转换
let data = JSON.parse(res.data)

JSON.parse() [从一个字符串中解析出json对象]

JSON.stringify() [从一个对象中解析出字符串]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值