默认条件在节点中不起作用



我有以下代码:

var port = request.app.settings.port || 3000;

这将引发错误:

TypeError: Cannot read property 'settings' of undefined
   at forceLogin (/home/projects/nodejs/node_modules/connect-keycloak/middleware/protect.js:5:25)
   at /home/jaec/WebstormProjects/punters/services-api/node_modules/connect-keycloak/middleware/protect.js:44:5
   at call (/home/jaec/WebstormProjects/punters/services-api/node_modules/connect/lib/proto.js:210:7)
   at next (/home/jaec/WebstormProjects/punters/services-api/node_modules/connect/lib/proto.js:154:5)
   at Function.app.handle (/home/jaec/WebstormProjects/punters/services-api/node_modules/connect/lib/proto.js:157:3)
   at Server.app (/home/jaec/WebstormProjects/punters/services-api/node_modules/connect/lib/connect.js:28:37)
   at Server.emit (events.js:98:17)
   at HTTPParser.parser.onIncoming (http.js:2113:12)
   at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:122:23)
   at Socket.socket.ondata (http.js:1971:22)

有没有理由不选择默认值 3000?

//This would have worked:
var port = undefined || 3000;
//this throws an error
var port = undefined.settings || 3000

未定义没有属性

var object = { };
object.prop // undefined
object.prop.another // throws an error

我认为您想要的是检查是否定义了request.app.settings.port并分配其值,但如果未定义,则分配3000

在这种情况下,您要执行以下操作,

var port = ( request.app && request.app.settings && request.app.settings.port ) || 3000;

最新更新