Javascript 在数据库中保存已解码的用户

Javascript 在数据库中保存已解码的用户,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,我有一个应用程序,用户可以拍摄一些照片并发送到数据库,就这么简单 每次用户登录时,他都会得到一个令牌,如果令牌一切正常(他不需要登录) 我按照教程进行了jwt身份验证,现在我想检查每个请求,除了(/login/register)该令牌,并对其进行解码以获取用户信息(我只是保存用户名,它是唯一的,所以很好) 假设我正在路由到/flower?flowerName(随机路由),所以在这个路由中,我想创建一个寄存器并在数据库中保存一些数据,但在此之前,正如我所说的,我应该输入一个中间件来检查权限 这是我

我有一个应用程序,用户可以拍摄一些照片并发送到数据库,就这么简单

每次用户登录时,他都会得到一个令牌,如果令牌一切正常(他不需要登录)

我按照教程进行了jwt身份验证,现在我想检查每个请求,除了(/login/register)该令牌,并对其进行解码以获取用户信息(我只是保存用户名,它是唯一的,所以很好)

假设我正在路由到/flower?flowerName(随机路由),所以在这个路由中,我想创建一个寄存器并在数据库中保存一些数据,但在此之前,正如我所说的,我应该输入一个中间件来检查权限

这是我的中间件:

var jwt = require('jsonwebtoken');
var jwtConfig = require('../config/jwt');

module.exports = function(req, res, next) {
console.log("entered");

// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
      console.log(req.headers['x-access-token']);
// decode token
if (token) {
    // verifies secret and checks exp
    jwt.verify(token,jwtConfig.secret, function (err, decoded) {
        if (err) {
            return res.json({ success: false, message: 'Failed to authenticate token.' });
        } else {
            console.log("HEREE");
            // if everything is good, save to request for use in other routes
            req.decoded = decoded;
            console.log(req.decoded);
            next();
        }
    });
} else {
    // if there is no token
    // return an error
    return res.status(403).send({
        success: false,
        message: 'No token provided.'
    });
}
    var express = require('express');
var User = require('../models').User;
var Foto = require('../models').Foto;
var router = express.Router();
var jwt = require('jsonwebtoken');
var fs = require('fs');
var fsPath = require('fs-path');


module.exports = {
    sendPicture: function (req, res,next) {
        var bitmap = new Buffer(req.body.base64, 'base64');
        var dummyDate = "25/04/14-15:54:23";
        var lat = req.params.lat;
        var lon = req.params.lon;
        var alt = req.params.alt;
        var path = __dirname + "/../public/images/" + req.params.flowerName + "/example3.png";
        var fotoPath = ""
        var userId = 1;
        console.log(lat);
        console.log(lon);
        console.log(alt);
        console.log(req.query.token);
        fsPath.writeFile(path, bitmap, function (err) {
            if (err) {
                console.log(err.stack);
                return err;
            }
            Foto.create({
                image: path,
                userId: userId
            }).then(function () {
                return res.status(200).json({ message: "foto created" });
            }).catch(function(err){
                console.log(err.stack);
            })

        });
    }
}
}

我的问题是,如何获取中间件的用户ID,然后将其保存到下一个路由中?我能通过下一个通道吗?像下一个(用户ID)???? 那么我怎样才能得到参数呢

这是我保存注册表的地方:

var jwt = require('jsonwebtoken');
var jwtConfig = require('../config/jwt');

module.exports = function(req, res, next) {
console.log("entered");

// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
      console.log(req.headers['x-access-token']);
// decode token
if (token) {
    // verifies secret and checks exp
    jwt.verify(token,jwtConfig.secret, function (err, decoded) {
        if (err) {
            return res.json({ success: false, message: 'Failed to authenticate token.' });
        } else {
            console.log("HEREE");
            // if everything is good, save to request for use in other routes
            req.decoded = decoded;
            console.log(req.decoded);
            next();
        }
    });
} else {
    // if there is no token
    // return an error
    return res.status(403).send({
        success: false,
        message: 'No token provided.'
    });
}
    var express = require('express');
var User = require('../models').User;
var Foto = require('../models').Foto;
var router = express.Router();
var jwt = require('jsonwebtoken');
var fs = require('fs');
var fsPath = require('fs-path');


module.exports = {
    sendPicture: function (req, res,next) {
        var bitmap = new Buffer(req.body.base64, 'base64');
        var dummyDate = "25/04/14-15:54:23";
        var lat = req.params.lat;
        var lon = req.params.lon;
        var alt = req.params.alt;
        var path = __dirname + "/../public/images/" + req.params.flowerName + "/example3.png";
        var fotoPath = ""
        var userId = 1;
        console.log(lat);
        console.log(lon);
        console.log(alt);
        console.log(req.query.token);
        fsPath.writeFile(path, bitmap, function (err) {
            if (err) {
                console.log(err.stack);
                return err;
            }
            Foto.create({
                image: path,
                userId: userId
            }).then(function () {
                return res.status(200).json({ message: "foto created" });
            }).catch(function(err){
                console.log(err.stack);
            })

        });
    }
}

您应该能够通过
res.locals
在整个链中传递任何状态变量,即

res.locals.decoded = decoded;
next();

您可以在res.locals上找到详细信息

您应该能够通过
res.locals
在整个链中传递任何状态变量,即

res.locals.decoded = decoded;
next();
您可以在res.locals上找到详细信息