Node.js程序报错:app.configure is not a function问题咨询
解决Express中
app.configure is not a function错误的方案 嘿,这个问题我太熟了!先看看你遇到的情况:
你编写的Express代码如下:
var express = require("express") ,http =require("http"); var app = express(); app.configure(function(){ app.set("port", process.env.PORT || 3000); }); app.get("/", function(request,response){ var message = ["<h1>Hello guys</h1>"].join("\n"); response.send(message); }); app.get("/user/:userId", function(request,response){ response.send("<h1>Hello, user # " + response.params.userId + "."); });
运行时碰到了这个错误:
Error:-
app.configure(function(){}); TypeError: app.configure is not a function
问题根源
这个错误是因为你使用的是Express 4.x及以上版本,而app.configure()方法在Express 4版本中已经被官方移除了!这个方法是Express 3及更早版本里用来统一管理不同环境(开发/生产)配置的语法,4.x版本之后官方简化了配置逻辑,不再需要用app.configure()包裹配置代码。
另外顺便提个小细节:你的第二个路由里还有个错误——你用了response.params.userId来获取URL参数,但正确的写法应该是request.params.userId,不修正的话访问/user/xxx路径时也会报错哦。
修正后的完整代码
去掉app.configure()包裹,直接编写配置,同时修复参数获取的问题,最终代码如下:
var express = require("express"), http = require("http"); var app = express(); // 直接设置端口,无需app.configure包裹 app.set("port", process.env.PORT || 3000); app.get("/", function(request, response) { var message = ["<h1>Hello guys</h1>"].join("\n"); response.send(message); }); app.get("/user/:userId", function(request, response) { // 修正为request.params.userId获取URL参数 response.send("<h1>Hello, user # " + request.params.userId + ".</h1>"); }); // 补充你原代码遗漏的服务器启动逻辑 http.createServer(app).listen(app.get("port"), function() { console.log("Express server listening on port " + app.get("port")); });
补充说明
如果你的项目需要区分不同环境的配置,可以直接通过process.env.NODE_ENV来判断,比如:
if (process.env.NODE_ENV === 'production') { // 生产环境专属配置 app.set('port', process.env.PORT || 80); } else { // 开发环境专属配置 app.set('port', 3000); }
内容的提问来源于stack exchange,提问作者Jay Bhajiyawala
相关产品推荐
相关产品推荐

