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]


7 回复

根据你提供的错误信息和代码片段,问题出在 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();
});

解释

  1. 引入 cookie-parser:通过 require('cookie-parser')cookie-parser 引入到应用中。
  2. 使用 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 应该单独安装,并且以不同的方式调用。

解决方案

  1. 安装 cookie-parser

    首先需要安装 cookie-parser 中间件包:

    npm install cookie-parser --save
    
  2. 修改你的代码

    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 并让应用正常运行。

回到顶部