Node.js 插件 —— express 、token验证、CORS跨域

2 篇文章 0 订阅
1 篇文章 0 订阅

Node.js 插件 —— express 一个简洁灵巧的node.js Web 应用框架

全局安装依赖包

npm i express -g

npm i express-generator -g express v4 之后,就需要手动安装一下Generator

检测express是否安装成功:express --version, 如果出现版本号,则安装完成。

express 创建工程

  1. 打开终端,选择路径到您想要创建的位置;
  2. 使用命令创建项目 express project_name;
  3. 下载相关依赖包 npm install 在project_name目录下执行这个命令;
  4. 依赖包下载完成后,在project_name目录下执行 npm start 启动项目;
  5. 在浏览器输入地址: 127.0.0.1:3000,如果能打开,那么就大功告成了,最简单的服务器就可以使用了
  6. 然后这个工程就初始化完成了;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hI9BvjPQ-1572777998655)(express_files/1.jpg)]

目录解释

- bin:存放可执行文件(服务器基础配置www)
- public:存放 image、css、js 等文件
- routes:存放路由文件
- views:存放视图文件或者说模版文件
- app.js:启动文件,或者说入口文件
- package.json:存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时,运行 npm install,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块
- node_modules:存放 package.json 中安装的模块,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下

在bin/www 中配置自动 “运行时自动打开浏览器” 只需要添加两句代码

var cp = require("child-process"); // 引入 child-process 模块
cp.exec("start http://127.0.0.1:3000"); // 配置项目启动后,自动在默认浏览器打开该窗口

app.js 解释

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

// 导入路由依赖模块
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

/// 使用中间件形式实现跨域访问(自己添加)
app.use("*", function (req, res, next) {
  //设置允许跨域的域名,*代表允许任意域名跨域
  res.header("Access-Control-Allow-Origin", "*");
  //允许的header类型
  res.header("Access-Control-Allow-Headers", "content-type");
  //接收ajax请求手动提交的cookie信息
  res.header("Access-Control-Allow-Credentials", true);
  //跨域允许的请求方式 
  res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
  if (req.method == 'OPTIONS')
    res.sendStatus(200); //让options尝试请求快速结束
  else
    next();
});


/// token验证, 需要用到下面的token.js
app.use(function (req, res, next) {
  console.log("req.url", req.url)
  if (req.url == "/users/login" || req.url == "/users/register") { //如果是登录或者注册请求,直接通过验证
    next();
  }
  else { //表示非登录请求,需要验证token
    //获取前端传来的token,开始验证,如果验证通过运行进入下一步,否则直接解决提供服务
    var token = req.query.token || req.body.token;
    tokenobj.verifyToken(token, function (bo) {
      if (bo) {
        console.log("验证成功")
        next();
      }
      else {
        console.log("token异常")
        res.send({ success: false, msg: "token无效,请重新登录" });
      }
    });
  }
});


// 根据用户输入的地址,进入不同的路由文件
// 列如地址:127.0.0.1:3000/users/login.html;
// js 就会根据127.0.0.1:3000之后的内容(/users/login.html)进行字符串匹配,找到一个匹配最完全的项(/users),进入相应的路由文件(usersRouter)
app.use('/', indexRouter);
app.use('/users', usersRouter);

// 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;

token.js token验证

var jwt = require("jsonwebtoken");

var tokenObj = {
    createToken: function (cont, time) {
        var content = cont //token存储的内容
        var secretOrPrivateKey = 'cc.com' // 这是加密的key(密钥或私钥) 
        var token = jwt.sign(content, secretOrPrivateKey, {
            expiresIn: time // 过期时间
        })
        return token;
    },
    verifyToken: function (token, fn) {
        var secretOrPrivateKey = 'cc.com' // 这是加密的key(密钥或私钥)
        jwt.verify(token, secretOrPrivateKey, function (err, decode) {
            if (err) { // 当token过期,或这是一个伪造的token,或这是无效的token时会触发此逻辑 
                console.log(err)
                fn(false);
            } else {
                console.log(decode);
                fn(true);
            }
        })
    }
}
module.exports=tokenObj;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值