Nodejs学Blog实例,app.use(express.cookieParse());处报错,代码及报错信息如下,请高手指教。
Nodejs学Blog实例,app.use(express.cookieParse());处报错,代码及报错信息如下,请高手指教。
本人初学node.js,跟着该社区前辈做这个实例
var express = require(‘express’) , routes = require(’./routes’) , user = require(’./routes/user’) , http = require(‘http’) , path = require(‘path’) , MongoStore=require(‘connect-mongo’) (express) , settings=require(’./settings’) , flash=require(‘connect-flash’);
var app = express();
// all environments app.set(‘port’, process.env.PORT || 80); app.set(‘views’, __dirname + ‘/views’); app.set(‘view engine’, ‘ejs’); app.use(flash()); app.use(express.favicon()); app.use(express.logger(‘dev’)); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParse()); app.use(express.session({ secret:settings.cookieSecret, store:new MongoStore({ db:settings.db }) })); app.use(app.router); app.use(express.static(path.join(__dirname, ‘public’)));
// development only if (‘development’ == app.get(‘env’)) { app.use(express.errorHandler()); }
routes(app);
http.createServer(app).listen(app.get(‘port’), function(){ console.log('Express server listening on port ’ + app.get(‘port’)); });
app.use(function(req,res,next){ var err=req.flash(‘error’), success=req.flash(‘success’); res.locals.user=req.session.user; res.locals.error=err.length ? err:null; res.locals.success=succcess.length ? success:null; next(); });
app.use(express.cookieParse()); ^ TypeError: Object function createApplication() { var app = connect(); utils.merge(app, proto); app.request = { proto: req }; app.response = { proto: res }; app.init(); return app; } has no method 'cookieParse’ at Object.<anonymous> (D:\nodejs\exblog\app.js:26:17) at Module._compile (module.js:456:26) at Object.Module._extensions…js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:901:3 [Finished in 1.7s]
根据你提供的错误信息和代码片段,问题出在 app.use(express.cookieParse());
这一行。实际上,在较新的 Express 版本中,cookieParser
已经被重构为一个独立的中间件模块,而不是包含在 Express 中。
解决方案
你需要安装 cookie-parser
模块,并使用它来替换掉 express.cookieParse()
方法。
步骤 1: 安装 cookie-parser
首先,确保你已经安装了 cookie-parser
:
npm install cookie-parser --save
步骤 2: 修改代码
然后,修改你的代码,用 cookieParser
替换掉 express.cookieParse()
:
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, MongoStore = require('connect-mongo')(express)
, settings = require('./settings')
, flash = require('connect-flash');
// 引入 cookie-parser
var cookieParser = require('cookie-parser');
var app = express();
// all environments
app.set('port', process.env.PORT || 80);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
// 使用 cookie-parser 中间件
app.use(cookieParser());
app.use(flash());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({
secret: settings.cookieSecret,
store: new MongoStore({
db: settings.db
})
}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
routes(app);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
app.use(function(req, res, next) {
var err = req.flash('error'),
success = req.flash('success');
res.locals.user = req.session.user;
res.locals.error = err.length ? err : null;
res.locals.success = success.length ? success : null;
next();
});
解释
- 引入
cookie-parser
:通过require('cookie-parser')
将cookie-parser
引入到应用中。 - 使用
cookie-parser
:通过app.use(cookieParser())
在中间件链中插入cookie-parser
,使其能够解析请求中的 cookie。
这样,你就可以解决 TypeError: Object has no method 'cookieParse'
的错误,并正确地处理 cookie。
express.cookieParser(‘test’);
依然不行。 app.use(express.cookieParse(“mycookie”)); ^ TypeError: Object function createApplication() { var app = connect(); utils.merge(app, proto); app.request = { proto: req }; app.response = { proto: res }; app.init(); return app; } has no method ‘cookieParse’
app.use(express.cookieParse(‘mycookie’)); ^ TypeError: Object function createApplication() { var app = connect(); utils.merge(app, proto); app.request = { proto: req }; app.response = { proto: res }; app.init(); return app; } has no method ‘cookieParse’
你写错了吧,是express.cookieParser(), 而不是express.cookieParse啊,你少了最后那个r
中枪了~~~
确实是少了一个r,谢谢了。
在你提供的代码中,app.use(express.cookieParse());
这一行导致了错误,因为 express.cookieParse
方法并不存在。从 Express 4.x 版本开始,中间件的使用方式发生了变化,cookieParser
应该单独安装,并且以不同的方式调用。
解决方案
-
安装
cookie-parser
包首先需要安装
cookie-parser
中间件包:npm install cookie-parser --save
-
修改你的代码
将
express.cookieParse()
替换为cookie-parser
:var express = require('express'); var cookieParser = require('cookie-parser'); // 添加这一行 var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var MongoStore = require('connect-mongo')(express); var settings = require('./settings'); var flash = require('connect-flash'); var app = express(); // all environments app.set('port', process.env.PORT || 80); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(cookieParser()); // 使用 cookie-parser app.use(flash()); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.session({ secret: settings.cookieSecret, store: new MongoStore({ db: settings.db }) })); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } routes(app); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); app.use(function(req, res, next) { var err = req.flash('error'), success = req.flash('success'); res.locals.user = req.session.user; res.locals.error = err.length ? err : null; res.locals.success = success.length ? success : null; next(); });
通过这些更改,你应该能够解决 TypeError
并让应用正常运行。