我是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文档。
答案 0 :(得分:1)
使用req.getHeader('token')您应该已经在标头中发送了令牌,或者使用了授权标头req.getHeader('authorization');并删除承载者,或者最好还是使用护照等标准中间件。
请参见https://nodejs.org/api/http.html#http_request_getheader_name
答案 1 :(得分:1)
以上tksilicon的观点。但这也意味着req是不确定的。您是否在没有中间件的情况下进行了尝试,以确保请求通过?还是尝试通过控制台将请求本身注销?
尽管我们看不到服务器代码,但将其发送到路由器的请求有可能发生了其他情况。
您的路由器需要导出到服务器代码,并作为中间件包含在服务器代码中,以便请求成功。
无论如何,有些建议希望对您有帮助