我正在创建一个API,所以我想添加一个用户系统并验证对该API的访问。
这将是验证的中间件:
'use strict'
const jwt = require('jwt-simple');
const moment = require('moment');
const config = require('../settings/config');
function isAuth(req, res, next) {
if (!req.headers.authotization) {
return res.status(403).send({
message: `No tiene autorizacion`
})
}
const token = req.headers.authotization.split(" ")[1];
const payload = jwt.decode(token, user, config.token.secret_token);
if (payload.exp <= moment().unix()) {
return res.status(401).send({
message: 'El token ha expirado'
})
req.user = payload.sub;
next();
}
}
module.exports = isAuth;
虽然这是一条路线:
'use strict'
const express = require('express');
const router = express.Router();
const auth = require('../middlewares/auth');
router.get('/', auth.isAuth, (req, res) => {
res.status(200).send({
message: `Tienes acceso`
})
})
另一方面,这是我的主要应用程序设置(app.js):
const express = require('express');
const bodyParser = require('body-parser');
const morgan = require('morgan');
const app = express();
const config = require('./config')
// Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(morgan('dev'));
// Routes variables
const productRouter = require('../routes/product');
const privateRouter = require('../routes/private');
// Routes uses
app.use('/api/product', productRouter);
app.use('/private', privateRouter);
app.listen(config.app.port, err => {
if (err) throw err;
console.log(`Server listening on port ${config.app.port}`)
})
module.exports = app;
我得到这个错误:
D:\api rest\node\u modules\express\lib\router\route。js:202抛出新错误(msg)^
错误:路由。get()需要一个回调函数,但在路由上得到了一个[object Undefined]。[as get](D:\api rest\node\u modules\express\lib\router\route.js:202:15)at函数。原型。[as get](D:\api rest\node\u modules\express\lib\router\index.js:510:19)位于对象。(D:\api rest carlos azaustre\routes\private.js:6:8)位于模块_在对象处编译(internal/modules/cjs/loader.js:959:30)。模块_扩展。。模块处的js(internal/modules/cjs/loader.js:995:10)。在函数处加载(内部/modules/cjs/loader.js:815:32)。模块_在模块处加载(内部/modules/cjs/loader.js:727:14)。require(internal/modules/cjs/loader.js:852:19)at require(internal/modules/cjs/helpers.js:74:18)at Object。(D:\api rest carlos azaustre\settings\app.js:15:23)位于模块_在对象处编译(internal/modules/cjs/loader.js:959:30)。模块_扩展。。模块处的js(internal/modules/cjs/loader.js:995:10)。在函数处加载(内部/modules/cjs/loader.js:815:32)。模块_在模块处加载(内部/modules/cjs/loader.js:727:14)。require(internal/modules/cjs/loader.js:852:19)at require(internal/modules/cjs/helpers.js:74:18)[nodemon]应用程序崩溃-在启动之前等待文件更改。。。
有时会在错误的顶部添加这一行:
(节点:3092)MaxListenerSexceed矮化:检测到可能的EventEmitter内存泄漏。11个退出侦听器
阅读答案后,我编辑我的问题。我只放置了auth,没有放置auth。isAuth和我得到以下错误:
D:\api-rest-carlos-azAustralia\node_modules\Express\lib\router\index.js:458抛出新的TypeError('Router.use()需要一个中间件函数,但得到了一个'gettype(fn))^
类型错误:路由器。use()需要一个中间件函数,但在函数处获得了一个对象。在函数中使用(D:\api rest\node\u modules\express\lib\router\index.js:458:13)。(D:\api rest\node\u modules\express\lib\application.js:220:21)位于数组中。函数的forEach()。在对象上使用(D:\api rest\node\u modules\express\lib\application.js:217:7)。(D:\api rest\settings\app.js:20:5)位于模块_在对象处编译(internal/modules/cjs/loader.js:959:30)。模块_扩展。。模块处的js(internal/modules/cjs/loader.js:995:10)。在函数处加载(内部/modules/cjs/loader.js:815:32)。模块_在模块处加载(内部/modules/cjs/loader.js:727:14)。require(internal/modules/cjs/loader.js:852:19)at require(internal/modules/cjs/helpers.js:74:18)at Object。(D:\api rest carlos azaustre\index.js:3:13)位于模块_在对象处编译(internal/modules/cjs/loader.js:959:30)。模块_扩展。。模块处的js(internal/modules/cjs/loader.js:995:10)。在函数处加载(内部/modules/cjs/loader.js:815:32)。模块_加载(internal/modules/cjs/loader.js:727:14)[nodemon]应用程序崩溃-在启动前等待文件更改。。。
有人知道是什么原因吗?
是的,您可以使用以下代码导出函数:模块。导出=isAuth
但是你可以这样调用它:
auth。iAuth
假设您正在做类似const auth=要求('./bin/auth.js');
之类的事情
auth
将是函数本身——不会有isAuth
属性。
所以你应该试试这个:
router.get('/', auth, (req, res) => {
你还没有发布你的全部代码,所以这只是一个最好的猜测。
module.exports=isAuth;
表示只导出函数,而不导出其他内容。这意味着当您执行const auth=要求('.../middlewares/auth');
时,auth
是实际的函数,而不是包含isAuth
作为属性的对象。
所以,做路由器。get('/',auth,(req,res)=
在这里详细了解模块:https://js.evie.dev/modules
我正在尝试使用文件系统。我的< code>CMakeLists.txt中有< code>-std=c 11 -std=c 1y。GCC版本为4.9.2。然而,我得到了一个错误: 使用的正确方法是什么?
问题内容: 在这里,它说,“注:意思是‘我不关心这个值’”,但是从JavaScript来了,我不明白是什么意思。 我可以打印这些功能的唯一方法是在参数前使用下划线: 没有下划线,我必须这样写,以避免出现任何错误: 我不理解此下划线用法。我何时,如何以及为什么使用这些下划线? 问题答案: 不同的用例有一些细微差别,但是通常下划线表示“忽略此”。 在声明一个新函数时,下划线告诉Swift调用时该参数不
我试图使用Java8Javadoc工具,但它抱怨是一个未知标记: 我看到有一些方法可以禁用doclint,但我真的想知道哪些标签列表被支持(或者为什么这个不支持)。 更多信息在这个问题,这个问题和从这个博文。
我想在spring boot项目中使用“truncate table”语句而不是“delete”语句,因为我需要重置mysql中的自动增量id。这是我的代码: 但有一个例外,就像这样: 其他操作已经工作,如插入、更新或选择,原因是什么,我应该修改什么?
从TensorArray读取: 使用: 问题: 回溯(最近一次调用last):RLU培训中第130行的文件“\main.py”。train()文件“C:\Users\user\Documents\Projects\rl toolkit\rl_training.py”,第129行,在train self中_rpm,赛尔夫。批量大小,自行确定。梯度步数,记录步数b=self。在call result=
问题内容: 我正在尝试将Socket.io与Node.js结合使用,并在路由逻辑内发送到套接字。 我有一个相当标准的Express 3安装程序,其中的server.js文件位于该路由中,然后我的index.js位于一个routes文件夹中,该文件夹导出站点的所有页面/公共可访问功能。因此,它们看起来像: 在server.js中定义的路由如下: 我假设我必须在server.js中创建socket.i