【问题标题】:app.js is not working in express 3app.js 在 express 3 中不起作用
【发布时间】:2015-12-17 15:58:39
【问题描述】:

我来了

连接不推荐使用的多部分:在 node_modules\express\node_modules\connect\lib\middleware\bodyParser.js 处使用解析器(多方、busboy、强大)npm 模块 连接不推荐使用的 methodOverride:在 app.js:22:17 处使用方法覆盖 npm 模块 D:\login\node_modules\express\lib\router\index.js:306 抛出新的错误(味精); ^ 错误:.post() 需要回调函数,但得到了 [object Undefined] 在 D:\login\node_modules\express\lib\router\index.js:306:11 在 Array.forEach (本机) 在 Router.route (D:\login\node_modules\express\lib\router\index.js:302:13) 在 Router.(匿名函数) [as post] (D:\login\node_modules\express\lib\router\index.js:333:16) 在 Function.app.(匿名函数) [as post] (D:\login\node_modules\express\lib\application.js:467:26) 在对象。 (D:\login\app.js:32:5) 在 Module._compile (module.js:434:26) 在 Object.Module._extensions..js (module.js:452:10) 在 Module.load (module.js:355:32) 在 Function.Module._load (module.js:310:12)

在我的 express.Express 版本为 3 的节点中,我无法启动 app.js 文件。

这里是 app.js 文件:

/**  * Module dependencies.  */

var express = require('express');
var routes = require('./routes');
var signup = require('./routes/login');
var login = require('./routes/signup');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 8000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({secret: 'secretkeyQWERTY'}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')){
  var use=app.use(express.errorHandler());
}

app.get('/', routes.index);
app.post('/signup', signup.signup);
app.post('/login', login.login);


http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

【问题讨论】:

  • 你能添加你的 app.js 的示例代码吗?
  • 这是在使用 express.bodyParser() 时发出的警告,因为对之前捆绑的 express.multipart() 的支持已从 Connect 和 Express 中删除。相关:How to get rid of Connect 3.0 deprecation alert?
  • 有人可能会问“你到底为什么要使用 express 3”?

标签: node.js express


【解决方案1】:

我刚刚用 express 3.x 测试了这个。

您可以通过安装body-parser 软件包轻松解决此问题。不推荐使用 express 中内置的 body-parser 连接。

npm install --save body-parser
npm install --save method-override

假设您希望接受 JSON 作为正文...

更改您的代码:

app.use(express.bodyParser())
app.use(express.methodOverride())

到:

var bodyParser = require('body-parser');
var methodOverride = require('method-override')
app.use(bodyParser.json());
app.use(methodOverride());

【讨论】:

  • 您是否删除了之前的 app.use() 语句?更改该语句后我无法重现该问题
  • 是的,我做到了。但仍然存在“连接不推荐使用的 methodOverride:在 app.js 处使用方法覆盖 npm 模块”!
  • 删除行:app.use(express.methodOverride());
  • 所以这是方法覆盖的另一个问题。您无法升级到 v4.x.x 有什么原因吗?每个中间件被分成不同的包。简而言之,您需要按照我向您展示的每个中间件的正文解析器进行操作。例如:method-override
  • @technicallyjosh,现在需要使用版本 3。删除覆盖方法没问题,但错误是“.post() 需要回调函数但得到了 [object Undefined]”
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2015-10-16
  • 2016-07-30
  • 1970-01-01
相关资源
最近更新 更多