文档章节

express3.x升至express4.x遇到的问题

90后爱国
 90后爱国
发布于 2015/03/03 14:15
字数 575
阅读 61
收藏 0

Most middleware (like favicon) is no longer bundled with Express

Error: Most middleware (like favicon) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.

Solution:

For Express 4 :
// Serve favicon.ico.

$> npm install serve-favicon

Then in your server .js script :
var favicon = require(‘serve-favicon’);
app.use(favicon(options.favicon));

For Express 3 :

This is likely the syntax that gave you the error above

app.use(express.favicon(options.favicon));

---------------------------------------------------------------------------------

/Users/user/Desktop/workspace150302/WeDateServer/node_modules/serve-favicon/index.js:45

  if (!path) throw new TypeError('path to favicon.ico is required');

                   ^

TypeError: path to favicon.ico is required


改为"static-favicon": "~1.0.0",就可以了


--------------------------------------------------------------------------------------


Error: Most middleware (like session) is no longer bundled with Express and must be installed separately.

最后通过搜索该错误解决方案,发现是因为网上的方法适用于express3.x,express4.0+已经不再内置session,需要另加中间件。

我的package.json版本


{

  "name": "WeDateServer",

  "version": "0.0.0",

  "private": true,

  "scripts": {

    "start": "node ./bin/www"

  },

  "dependencies": {

    "express": "~4.9.8",

    "body-parser": "~1.8.1",

    "cookie-parser": "~1.3.3",

    "morgan": "~1.3.0",

    "serve-favicon": "~2.1.3",

    "debug": "~2.0.0",

    "jade": "~1.6.0",

    "ejs": "~2.3.1",

    "mongodb": "~1.4.32",


    "connect-mongo":"~0.7.0",

    "node-uuid": "~1.4.2",

    "formidable": "~1.0.17",

    "gridform":"~0.1.7",

    "nodemailer":"~1.3.1",

    "generic-pool":"~2.1.1",

    "amqp":"~0.2.3",

    "nodeunit": "~0.9.0",

    "request": "~2.53.0",

    "express-session":"1.10.3",

    "cookies":"0.5.0",

    "static-favicon":"2.0.0"

  }

}

app.js通过测试的代码:

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');

var http = require('http');
var settings = require('./settings');
var MongoStore = require('connect-mongo')(session);
var fs = require('fs');
var accessLogfile = fs.createWriteStream('access.log',{flags:'a'});
var errorLogfile = fs.createWriteStream('error.log', {flags:'a'});

var amqp = require('amqp');
var domainMiddleware = require('./lib/domain.js');

var routes = require('./routes/index');

var server = http.createServer();
var app = express();

app.use(favicon());
app.use(domainMiddleware({
    server:server,
    killTimeout: 30000
}));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('env','production');
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
    secret: settings.cookieSecret,
    //store: new MongoStore(settings.replicaSet), //settings.singleServer for localhost
    store : new MongoStore({
        db : settings.db,
        host : '127.0.0.1',
        port : '27017'

    }),
    cookie: {
        expires: new Date(Date.now() + 60 * 1000),
        maxAge: 60*1000
    }
}));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

/*
 connect to rabbitMQ, create a exchange( routKey: A--APNS  E--Email) to push message to APNS queue or Emai queue
 */
app.rabbitMQConnection = amqp.createConnection({host:settings.rabbitMQHost,
    port:settings.rabbitMQPort,
    login:settings.rabbitMQUser,
    password:settings.rabbitMQPassword});
app.rabbitMQConnection.on('ready',function(){
    console.log('connect to the rabbitMQ successful');
    app.rabbitMQConnection.exchange('router',{type: 'direct',autoDelete: false,confirm: true},function(exchange){
        app.e = exchange;
    });
});
// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
//    app.use(express.errorHandler());
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}
//production only
if ('production' == app.get('env')) {

    app.use(logger({stream:accessLogfile}));
    app.use(function(err, req, res, next){
        var meta = '['+ new Date() +']' + req.url + '\n';
        errorLogfile.write(meta + err.stack + '\n');
        next();
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

exports.server= server;
module.exports = app;

express 4.x 分离了middleware,除了static,其他需要自行安装

© 著作权归作者所有

90后爱国
粉丝 7
博文 85
码字总数 45624
作品 0
北京
前端工程师
私信 提问
Nodejs express中创建ejs项目,解决express下默认创建jade,无法创建ejs问

最近在看《Node.js开发指南》,看到使用nodejs进行web开发的时候,准备创建ejs项目遇到问题了, 书上命令为: 1 express -t ejs microblog 可是执行后,仍旧创建的是jade项目。 原来,expre...

weixingo
2016/07/01
19
0
app.use(express.methodOverride('_method'))执行报错

错误信息 F:mydevworktodonode_modulesexpresslibexpress.js:99 throw new Error('Most middleware (like ' + name + ') is no longer bundle ^Error: Most middleware (like methodOverride......

imhaha
2015/09/17
388
0
Node.js开发框架Express4.x

前言 Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新。基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术。在...

痕無影
2015/08/07
295
0
NodeJs项目中的一些要点记录

前言 学习NodeJs也有一段时间了,踩过许多坑,在这里打算记录一下自己觉得有用的点,以备以后所需。 代码调试# 一般我们调试Js项目都是通过Alert()(前端)或者 Console.log()(后端),这总...

MageekChiu
2017/08/01
0
0
express4.x Request对象获得参数方法

最近看完慕课网 “node.js 建站攻略”后, 对mongodb 操作有了进一步认识, 为了进一步巩固该数据库知识, 于是使用学到的知识搭建一个最简单的mongoDemo. 搭建完成后已放到Github分享, 详情...

90后爱国
2015/07/22
54
0

没有更多内容

加载失败,请刷新页面

加载更多

官方来源的 Duo Mobile App 解决了我的 Network Difficulties 问题

https://help.duo.com/s/article/2094?language=en_US 我利用百度搜索下载了一个 Duo Mobile App (由于 Google Play)在大陆不可用。 在扫描旧手机上的 Duo Mobile App 的二维码时, 显示出错...

圣洁之子
2分钟前
1
0
Zabbix监控Mysql容器(Docker容器)主从是否存活

1、在Zabbix Web端创建模板

abowu
4分钟前
1
0
基于 RocketMQ 的同城双活架构在美菜网的挑战与实践

本文整理自李样兵在北京站 RocketMQ meetup分享美菜网使用 RocketMQ 过程中的一些心得和经验,偏重于实践。 嘉宾李样兵,现就职于美菜网基础服务平台组,负责 MQ ,配置中心和任务调度等基础...

大涛学长
10分钟前
1
0
设计模式之:外观模式和桥接模式

作者:DevYK 链接:https://juejin.im/post/5d7e01f4f265da03b5747aac 外观模式 介绍 外观模式 (Facade) 在开发过程中的运用评率非常高,尤其是在现阶段,各种第三方 SDK “充斥” 在我们周边...

Java架构Monster
11分钟前
1
0
人证合一核验设备

人脸身份验证机,人证合一设备1:N如我们现在在车站或一些重要的场所如步行街、城中村等人流密集的场所应用的人脸识别布控系统,其特点是动态和非配合。所谓的动态也就是识别的不是照 片,不是...

非思丸智能
13分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部