【问题标题】:app is not initialized in node express应用程序未在节点快递中初始化
【发布时间】:2014-05-13 04:56:04
【问题描述】:

我刚刚安装了 node 和 express。当我运行命令 node app.js 时,它给了我以下错误。

   connect.multipart() will be removed in connect 3.0
   visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
   connect.limit() will be removed in connect 3.0
   /var/www/nodeexpress/nodetest1/app.js:38
   console.log("Express server listening on port %d in %s mode", app.address().
                                                                ^
  TypeError: undefined is not a function
  at Server.<anonymous> (/var/www/nodeexpress/nodetest1/app.js:38:69)
  at Server.g (events.js:196:16)
  at Server.EventEmitter.emit (events.js:101:17)
  at net.js:1159:10
  at process._tickCallback (node.js:339:11)
  at Function.Module.runMain (module.js:492:11)
  at startup (node.js:124:16)
  at node.js:803:3

我的 app.js 看起来像

 var express = require('express')
  , routes = require('./routes');

//var app = module.exports = express.createServer();
var app = express();

// Configuration

app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ secret: 'your secret here' }));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
app.use(express.errorHandler());
});

// Routes

app.get('/', routes.index);

app.listen(8080, function(){
console.log("Express server listening on port %d in %s mode", app.address().port,    app.settings.env);
});

似乎 express 没有被初始化。我的节点版本是v0.11.13-pre,我使用 package.json 作为3.4.4 安装了 express 版本的 0.11.13-pree

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    解决办法

    您需要删除此行,因为 bodyParser 方法不在此版本中。

    app.use(express.bodyParser());

    替换为

    app.use(express.json());

    app.use(express.urlencoded());

    如果仍然遇到任何问题,请告诉我。

    【讨论】:

      【解决方案2】:

      使用 this.address().port 而不是 app.address().port

      address() 是 listen 函数所应用的 http 对象的函数属性

      来自连接 proto.js:

      app.listen = function(){
        var server = http.createServer(this);
        return server.listen.apply(server, arguments);
      };
      

      关于 connect.multipart() 警告,请查看以下答案:How to get rid of Connect 3.0 deprecation alert?

      【讨论】:

        猜你喜欢
        • 2015-04-29
        • 2020-06-30
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-16
        • 1970-01-01
        相关资源
        最近更新 更多