【问题标题】:Default condition not working in Node默认条件在节点中不起作用
【发布时间】:2015-02-04 08:23:48
【问题描述】:

我有以下代码:

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 是否有原因?

【问题讨论】:

  • 默认情况下request 没有名为app 的属性...所以除非你添加它...我认为你犯了一些错误。
  • 如果你想检查第一个选项并提供其他选项以防它不存在,你应该这样做 - var port = ( request.app && request.app.settings && request.app.settings.port ) || 3000; 它会首先检查 request.app.settings.port 的存在,但如果它分配 3000不在场。

标签: javascript node.js restify


【解决方案1】:
//This would have worked:
var port = undefined || 3000;

//this throws an error
var port = undefined.settings || 3000

undefined 没有属性

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

【讨论】:

    【解决方案2】:

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

    在这种情况下,您想进行以下操作,

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

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 2022-01-26
      • 2014-04-07
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多