节点快速中间件具有未定义的输入

时间:2020-04-16 08:57:23

标签: javascript node.js express

我是Node.js的新手,正在考虑将其用作当前DOT NET API的替代方法。无论如何,我编写了一些中间件来要求我的应用程序具有基本的非角色授权,并且我的函数输入不断遇到编译问题。

编译错误:

harry@harry-pc:~/api.harry.technology$ npm start

> api.harry.technology@0.0.0 start /home/harry/api.harry.technology
> node ./bin/www

/home/harry/api.harry.technology/helpers/authorize.js:7
  if (req.get('Token')) {
          ^
TypeError: Cannot read property 'get' of undefined
    at module.exports (/home/harry/api.harry.technology/helpers/authorize.js:7:11)
    ...stack trace through library

helpers / authorize.js:

var express = require('express');
var config = require('../config.json');

module.exports = (req, res, next) => {
  // console.log(req.get('Token'));
  // The following line is line 7:
  if (req.get('Token')) {
    if (jwt.verify(token, config.secret)) {
      console.log(jwt.verify(token, config.secret));
      next();
    } else {
      return res.status(401).json({ message: 'Unauthorized' });
    }
  } else {
    return res.status(401).json({ message: 'Unauthorized' });
  }
}

routes / users.js:

var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var authorize = require('../helpers/authorize');

// (other routes)

/* POST user */
router.post('/', authorize, (req, res, next) => {
  connection.query(
    'INSERT INTO `users` (`username`, `firstname`, `lastname`, `phone`, `email`, `password`) VALUES (?, ?, ?, ?, ?, ?);',
    [req.body.username, req.body.firstname, req.body.lastname, req.body.phone, req.body.email, req.body.password],
    (error, results, fields) => {
      if (error) throw error;
      res.send(results);
    });
});

我尝试过的事情:

我在网络上看到了类似的问题,但是这些解决方案要么不适用,要么不起作用。我还仔细阅读了一些JavaScript文档。

2 个答案:

答案 0 :(得分:1)

使用req.getHeader('token')您应该已经在标头中发送了令牌,或者使用了授权标头req.getHeader('authorization');并删除承载者,或者最好还是使用护照等标准中间件。

请参见https://nodejs.org/api/http.html#http_request_getheader_name

答案 1 :(得分:1)

以上tksilicon的观点。但这也意味着req是不确定的。您是否在没有中间件的情况下进行了尝试,以确保请求通过?还是尝试通过控制台将请求本身注销?

尽管我们看不到服务器代码,但将其发送到路由器的请求有可能发生了其他情况。

您的路由器需要导出到服务器代码,并作为中间件包含在服务器代码中,以便请求成功。

无论如何,有些建议希望对您有帮助