【问题标题】:Express Throws TypeError: Cannot read property 'app' of undefinedExpress Throws TypeError:无法读取未定义的属性“应用程序”
【发布时间】:2020-06-02 03:19:49
【问题描述】:

我有一个运行通用框架 express 的 nodejs 服务器。我最近注意到,当我从服务器发出请求时,我会在看似随机的时间收到此错误,例如,如果我要发出两次请求,错误通常只会发生在第一个请求,而不是第二个请求。我无法确定导致此错误的原因,因为我经常一次性编写代码,然后再进行测试。这是完整的错误:

TypeError: Cannot read property 'app' of undefined
    at json (/home/user/Desktop/project/node_modules/express/lib/response.js:256:18)
    at process._tickCallback (internal/process/next_tick.js:68:7) 'Unhandled Rejection at Promise' Promise {
  <rejected> TypeError: Cannot read property 'app' of undefined
      at json (/home/user/Desktop/project/node_modules/express/lib/response.js:256:18)
      at process._tickCallback (internal/process/next_tick.js:68:7) }

我可以从这个错误中看出它可能涉及对“app”的一些引用,但是我不确定它具体是什么,因为我最近没有更改任何与“app”有关的内容。这是我对服务器文件的快速配置:

    const express = require('express'),
        user = require('./routers/User.js'),
        helmet = require('helmet'),
        app = express();
    app.use(helmet());
    app.use(cors());
    app.use(bodyParser.urlencoded({
        extended: false
    }));
    app.use(bodyParser.json());
    app.set('trust proxy', true);

    //map router files to respective urls
    //these are stored in a directory and set above, these contain all of the handlers for each of my routes
    app.use('/user', user);

    //set port and listen on it
    app.listen(5000, () => console.log("Server running on port 5000"));

如果我还有什么需要,请询问。我试图在我的代码中包含与“app”一词有关的所有引用,但这可能还不够。

编辑:感谢大家的帮助,但我提供的代码并不适用,它只是我导入的示例,这是 express 的错误,我只是想找到出什么样的行为会导致它。很抱歉造成混乱。

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    您很可能在 "helmet = require('helmet') 之后缺少逗号

    const express = require('express'),
        user = require('./routers/User.js'),
        helmet = require('helmet'),
        app = express();
    app.use(helmet());
    app.use(cors());
    app.use(bodyParser.urlencoded({
        extended: false
    }));
    app.use(bodyParser.json());
    app.set('trust proxy', true);
    
    //map router files to respective urls
    //these are stored in a directory and set above, these contain all of the handlers for each of my routes
    app.use('/user', user);
    
    //set port and listen on it
    app.listen(5000, () => console.log("Server running on port 5000"));
    

    【讨论】:

      【解决方案2】:

      为了让你的代码工作,你必须添加

      const express = require('express'),
              user = require('./routers/User.js'),
              helmet = require('helmet')
       ----> const app = express();
      
      or helmet = require('helmet'), <-----
       app = express()
      

      【讨论】:

      • 这是问题的疏忽,不是真正的错误,抱歉。
      • 你能检查我编辑的答案,看看它是否解决了问题
      【解决方案3】:

      //对我来说工作得很好。删除了您的本地导入。这运行良好。

      const express = require('express');
      const helmet = require('helmet');
      const cors = require('cors');
      const bodyParser = require('body-parser')
      app = express();
      app.use(helmet());
      app.use(cors());
      app.use(bodyParser.urlencoded({
          extended: false
      }));
      app.use(bodyParser.json());
      app.set('trust proxy', true);
      //set port and listen on it
      app.listen(5000, () => console.log("Server running on port 5000"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-03
        • 2013-01-19
        • 2020-05-20
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        • 2016-03-04
        • 1970-01-01
        相关资源
        最近更新 更多