TypeError: Cannot read property 'split'在Nodejs中未定义

TypeError: Cannot read property 'split' of undefined in Nodejs

本文关键字:Nodejs 未定义 split property Cannot TypeError read      更新时间:2023-09-26

使用jwt-simple库,我得到以下错误:

TypeError: Cannot read property 'split' of undefined
    at module.exports (C:'my_application'services'mylist.js:5:40)
    at Layer.handle [as handle_request] (C:'my_application'node_modules'express'lib'router'layer.js:95:5)
    at next (C:'my_application'node_modules'express'lib'router'route.js:131:13)
    at Route.dispatch (C:'my_application'node_modules'express'lib'router'route.js:112:3)
    at Layer.handle [as handle_request] (C:'my_application'node_modules'express'lib'router'layer.js:95:5)
    at C:'my_application'node_modules'express'lib'router'index.js:277:22
    at Function.process_params (C:'my_application'node_modules'express'lib'router'index.js:330:12)
    at next (C:'my_application'node_modules'express'lib'router'index.js:271:10)
    at C:'my_application'api.js:39:3
    at Layer.handle [as handle_request] (C:'my_application'node_modules'express'lib'router'layer.js:95:5)
    at trim_prefix (C:'my_application'node_modules'express'lib'router'index.js:312:13)
    at C:'my_application'node_modules'express'lib'router'index.js:280:7
    at Function.process_params (C:'my_application'node_modules'express'lib'router'index.js:330:12)
    at next (C:'my_application'node_modules'express'lib'router'index.js:271:10)
    at logger (C:'my_application'node_modules'morgan'index.js:144:5)
    at Layer.handle [as handle_request] (C:'my_application'node_modules'express'lib'router'layer.js:95:5)

下面是mylist.js文件:

var jwt = require('jwt-simple');

module.exports = function (req, res) {
  var token = req.headers.authorization.split(' ')[1];
  var payload = jwt.decode(token, "shhh..");
  if(!payload.sub) {
    res.status(401).send({
      message: 'Authentication failed'
    });
  }
  if(!req.headers.authorization){
    return res.status(401).send({
      message: 'You are not authorized'
    });
  }
  res.json(mylist);
};
var mylist = [
  'Proj 1',
  'Proj 2',
  'Proj 3',
  'Proj 4'
];

我想看看用户是否被授权访问前端的mylist资源。
有人知道吗?

你假设它是一个字符串,即使你不知道那里是否真的有一个字符串。你应该先添加一些错误检查

module.exports = function (req, res) {
  if (typeof req.headers.authorization !== 'string') {
    res.sendStatus(400);
    return;
  }
  var tokens = req.headers.authorization.split(' ');
  if (tokens.length < 2) {
    res.sendStatus(400);
    return;
  }
  var token = tokens[1];
  var payload = jwt.decode(token, "shhh..");
  if(!payload.sub) {
    res.status(401).send({
      message: 'Authentication failed'
    });
  }
  ...
};

Edit:但是为什么你想要第二个令牌而不是第一个呢?