带有 express-unless 的 Node.js express-jwt 给出警告“对象可能是'未定义'”
Posted
技术标签:
【中文标题】带有 express-unless 的 Node.js express-jwt 给出警告“对象可能是\'未定义\'”【英文标题】:Node.js express-jwt with express-unless gives a warning "Object is possibly 'undefined'"带有 express-unless 的 Node.js express-jwt 给出警告“对象可能是'未定义'” 【发布时间】:2017-10-23 01:17:57 【问题描述】:使用 typescript 和 nodejs,以及 express-jwt 来验证真实性。 当我们将 express-jwt 与 unless 一起使用时,如下所示,tslint 抱怨在 unless 函数之后可能返回的未定义值。
import * as express from "express";
import * as jwt from "express-jwt";
import * as http from "http";
const refConfig = hash: 'mycompletelysecrethashstring', othersetting: 1 ;
app.use("/api", jwt( secret: refConfig.hash ).unless( path: ["/api/auth/signin"] ));
app.set("port", 8000);
const server: http.Server = app.listen(app.get("port"), () =>
console.log("Server is now running on port " + server.address().port);
);
错误信息如下:
[ts] Object is possibly 'undefined'.
是否有可能摆脱此警告,如果可以,正确的做法是什么?
问题在于以下行:
app.use("/api", jwt( secret: refConfig.hash ).unless( path: ["/api/auth/signin"] ));
据我所知,TypeScript 编译器抱怨路由列表在除非结尾可能是一个空列表。鉴于原始列表是“/api/auth/signin”的超集,这不是一个有效的问题,但我无法摆脱警告。
提前致谢。
【问题讨论】:
【参考方案1】:您在使用refConfig.hash
时没有确定refConfig
本身是否首先被定义。
您应该改为:
if (refConfig)
app.use("/api", jwt( secret: refConfig.hash ).unless( path: ["/api/auth/signin"] ));
更完整的检查是预先验证您的配置并处理不完整的情况(例如,提前退出并导致用户出错)。
【讨论】:
感谢您的回复,但是原代码中已经定义了refConfig,肯定不是这个原因。我已经更新了问题中的代码以反映这一事实。感谢您的提醒。 请分享 TypeScript 错误阻止的行号。 谢谢您。我对问题进行了更改以提供更准确的问题。【参考方案2】:除非您在示例中缺少它,否则您需要创建 app
实例:
const app = express()
app.use(/*...*/)
另外,从你的例子来看,jwt
不是一个函数,而是一个对象。试试看,
import jwt from 'express-jwt'
【讨论】:
这只是应用程序的一部分,除了问题中提到的行上的警告之外,其他一切工作正常。以上是关于带有 express-unless 的 Node.js express-jwt 给出警告“对象可能是'未定义'”的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 Javascript 的 MySQL (node.js)