javascript - Node JS Json Web token Router.use() 需要中间件函数,但未定义

标签 javascript json node.js express

在 Node JS 中创建登录类型并尝试使用 JSON token 。这是 server.js:

// dependancies
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var passwordHash = require('password-hash');

var jwt = require('jsonwebtoken');
var config = require('./config');
var User = require('./app/models/user');

// config

var port = process.env.PORT || 8080;
mongoose.connect(config.database);
app.set('superSecret', config.secret);

// body parser
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(bodyParser.json());

// morgan
app.use(morgan('dev'));

//routes
app.get('/', function(req, res) {
  res.send('Hello! The API is at http://localhost:' + port + '/api');
});

app.get('/setup', function(req, res) {
  var hashedPassword = passwordHash.generate('catsanddogs');
  var tommy = new User({
    user: 'Tommy Birt',
    password: hashedPassword,
    admin: false,
    MP: true,
    Position: true
  });
  // save
  tommy.save(function(err) {
    if (err) throw err;

    console.log('Saved');
    res.json({
      success: true
    });
  });
});

// API routes
var apiRoutes = express.Router();

apiRoutes.get('/', function(req, res) {
  res.json({
    message: 'Welcome to this api.'
  });
});


apiRoutes.post('/authenticate', function(req, res) {
  // Fine user
  User.findOne({
    user: req.body.user
  }, function(err, user) {
    // general error...
    if (err) throw err;

    // incorrect
    if (!user) {
      res.json({
        success: false,
        message: 'Authentication failed: No user'
      });
    } else if (user) {
      if (!passwordHash.verify(req.body.password, user.password)) {
        res.json({
          success: false,
          message: 'Authentication failed: Incorrect Password'
        });
      } else {
        // token!
        var token = jwt.sign(user, app.get('superSecret'), {
          expiresIn: 64000
        });

        res.json({
          success: true,
          message: 'Enjoy your token!',
          token: token
        });
      }
    }
  })
});
app.use('/api', apiRoutes);

apiRoutes.use(function(req, res, next) {
  // Lets find our token!
  var token = req.body.token || req.query.token || req.headers['x-access-token'];

  // Have we found it?
  if (token) {
    // Verify! No crackers please
    jwt.verify(token, app.get('superSecret'), function(err, decoded) {
      if (err) {
        // Somethings gone wrong...
        return res.json({
          sucess: false,
          message: 'Failed to authenticate token'
        });
      } else {
        // No errors! Yay :)
        req.decoded = decoded
        next();
      }
    });
  } else {
    // No token Sir! Get off this train!
    return res.satus(403).send({
      success: false,
      message: 'Stop cheating'
    });
  }
});

apiRoutes.use('/bank', bankRoutes);

var bankRoutes = express.Router();
bankRoutes.get('/balance', function(req, res) {
  res.send("Welcome to your balance!");
});

// lets roll
app.listen(port);
console.log('We have taken off at http://localhost' + port);

基本上,每当我运行时,在没有导航到任何内容的情况下,都会抛出此错误: typeError: Router.use() 需要中间件函数,但未定义。

发生什么事了?为什么会抛出这个错误?

最佳答案

问题可能出在您的bankRoutes -

apiRoutes.use('/bank', bankRoutes);

var bankRoutes = express.Router();
bankRoutes.get('/balance', function(req, res) {
  res.send("Welcome to your balance!");
});

您在定义之前调用了bankRoutes

所以像这样改变它(先定义它然后使用它)-

var bankRoutes = express.Router();
bankRoutes.get('/balance', function(req, res) {
  res.send("Welcome to your balance!");
});

apiRoutes.use('/bank', bankRoutes);

关于javascript - Node JS Json Web token Router.use() 需要中间件函数,但未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672089/

相关文章:

node.js - bcrypt 正在破坏我的 meteor 应用程序,我该如何解决?

javascript - 使用 Sequelize + multer 在 SQL 中记录图像名称的问题

javascript - 文件读取永远不会完成

javascript - ng-src 未加载图像

Javascript: object1 = object2 究竟产生了什么?

json - 如何在新的 Windows 终端配置文件中使用 Anaconda 运行 powershell.exe?

node.js - npm 审核 EINVALIDTAGNAME

javascript - AngularJS - 第一次单击时数据未填充在 html 页面中

html - 如何显示具有 HTML 数据的 JSON?

C++ Boost read_json 崩溃,我有#define BOOST_SPIRIT_THREADSAFE