javascript - 调用 "TypeError: Cannot read property ' 时获取 `npm start` 文件名' of undefined"

标签 javascript node.js express reactjs webpack

我正在关注 this quite lengthy but very informative post关于使用以下技术堆栈设置 Web 应用程序:

  • es 6
  • Node + express
  • Handlebars
  • react + react 路由器
  • webpack + babel

可以找到示例代码here .

我一直在跟进并且进展顺利,我确实理解了最重要的概念。但是,当我尝试运行它时(在我使用 git clone 下载它之后)我遇到了错误,如下所示:

$ npm install
$ npm start

包含错误的生成输出是:

> react-ssr-example@0.0.1 start /Users/nburk/Developer/node/templates/react-universal-web-apps-simple
> npm-run-all --parallel gulp server


> react-ssr-example@0.0.1 server /Users/nburk/Developer/node/templates/react-universal-web-apps-simple
> node-dev app/babel-server.js


> react-ssr-example@0.0.1 gulp /Users/nburk/Developer/node/templates/react-universal-web-apps-simple
> gulp

[19:10:39] Using gulpfile ~/Developer/node/templates/react-universal-web-apps-simple/gulpfile.js
[19:10:39] Starting 'build:scss'...
[19:10:39] Starting 'build:watch:app'...
TypeError: Cannot read property 'filename' of undefined
    at Object.obj.(anonymous function) [as runInThisContext] (/Users/nburk/Developer/node/templates/react-universal-web-apps-simple/node_modules/node-dev/lib/hook.js:25:55)
    at Object.<anonymous> (/Users/nburk/Developer/node/templates/react-universal-web-apps-simple/node_modules/graceful-fs/fs.js:10:13)
    at Module._compile (module.js:425:26)
    at Module._extensions..js (module.js:432:10)
    at nodeDevHook (/Users/nburk/Developer/node/templates/react-universal-web-apps-simple/node_modules/node-dev/lib/hook.js:58:7)
    at require.extensions.(anonymous function) (/Users/nburk/Developer/node/templates/react-universal-web-apps-simple/node_modules/babel-core/lib/api/register/node.js:214:7)
    at Object.nodeDevHook [as .js] (/Users/nburk/Developer/node/templates/react-universal-web-apps-simple/node_modules/node-dev/lib/hook.js:58:7)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
[19:10:39] Finished 'build:watch:app' after 12 ms
[19:10:39] Starting 'lint:app'...
[ERROR] 19:10:39 TypeError
[19:10:39] Starting 'server'...

有人看到我错过了什么吗?我什至不知道从哪里开始,错误中的文件名并没有真正告诉我任何事情......

更新

我检查了发生错误的文件 (/node_modules/node-dev/lib/hook.js),这是导致错误的代码:

/**
 * Patch the specified method to watch the file at the given argument
 * index.
 */
 function patch(obj, method, optionsArgIndex) {
  var orig = obj[method];
  if (!orig) return;
  obj[method] = function () {
    var opts = arguments[optionsArgIndex];
    var file = typeof opts == 'string' ? opts : opts.filename;
    if (file) callback(file);
    return orig.apply(this, arguments);
  };
}

最佳答案

您收到该错误是因为您试图访问其值 undefined variable 的属性。在你的情况下,opts正在获取值 undefined来自 var opts = arguments[optionsArgIndex];此行,您无法访问 undefined variable 的属性。

在访问对象的嵌套属性之前将其包装在 try-catch 中或添加检查。在 JavaScript 中,直接访问嵌套变量通常被认为是一种不好的方法。

例如,而不是 var a = b.c.d;你应该使用 var a = (a && a.b && a.b.c) || <some default value>;

在第一种情况下,如果bc未定义,您的应用程序将崩溃,但是,如果 bc在第二种情况下未定义,a将被分配您提供的默认值

关于javascript - 调用 "TypeError: Cannot read property ' 时获取 `npm start` 文件名' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37259608/

相关文章:

javascript - 将 javascript 传输到 jQuery 以用于轮播

node.js - Express.js req.body 未定义

node.js - 通过 Passport 策略在路由中传递用户信息

javascript - 使用类似于 adsense 的异步 javascript 显示远程页面

javascript - 类似 MapTypeId.TERRAIN 的 map ,带有深色水

javascript - 图表 js 大小和位置

javascript - socket.io应用程序结构

node.js - NodeJS 多线程和大数据集

javascript - Mongoose 更新嵌套值

node.js - Jade 本地人空白