Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 路由回调未执行,但中间件正在运行_Node.js_Express - Fatal编程技术网

Node.js 路由回调未执行,但中间件正在运行

Node.js 路由回调未执行,但中间件正在运行,node.js,express,Node.js,Express,所以这个项目在今天之前运行得很好,但是在git出错之后,我破坏了我的项目,无法恢复提交。在花了一段时间把一切都修好之后,我的路线现在断了。我的问题是,当现在调用我的API路由时,服务器挂起正好1分钟,然后超时并在服务器上记录404 为了提供一些背景资料,我正在使用样板文件。在调试过程中,我基本上将console.logs放在任何可能的地方,看起来我的express和passport的所有初始化中间件都工作正常,我的代码到达了定义路由的位置,没有任何错误 带有app.use的中间件可以工作,当发出

所以这个项目在今天之前运行得很好,但是在git出错之后,我破坏了我的项目,无法恢复提交。在花了一段时间把一切都修好之后,我的路线现在断了。我的问题是,当现在调用我的API路由时,服务器挂起正好1分钟,然后超时并在服务器上记录404

为了提供一些背景资料,我正在使用样板文件。在调试过程中,我基本上将console.logs放在任何可能的地方,看起来我的express和passport的所有初始化中间件都工作正常,我的代码到达了定义路由的位置,没有任何错误

带有
app.use
的中间件可以工作,当发出请求时,所有的检查都会签出,我放在那里的所有console.log都显示良好。console.logs仅停止出现在最终路由定义中,如本例所示:

app.get('/route', function(req, res, next) {
    console.log('this never shows');
    next();
}, function(req, res, next) {
    console.log('this never shows');
})
我的实际路线确实有一个
res.send()
,这只是一个示例。在这个路由之前,我在中间件中放入的所有console.log都显示了何时发出请求,因此它挂在
app
的某个地方

这是一个相当大的项目,所以如果您想要特定的代码示例,请询问,我将发布它。但是我能够恢复我在其他地方保存的所有重要文件,我非常确定我所有的代码都回到了以前的状态

编辑:

以下是我的文件和express中间件定义: config/express.js

/**
 * Module dependencies.
 */

var express = require('express');
var MongoStore = require('connect-mongo')(express);
var flash = require('connect-flash');
var helpers = require('view-helpers');
var swig = require('swig');
var session = require('express-session');

module.exports = function (app, config, passport) {

  app.set('showStackError', true);
  // should be placed before express.static
  app.use(express.compress({
    filter: function (req, res) {
      return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
    },
    level: 9
  }));
  app.use(express.favicon());
  app.use(express.static(config.root + '/public'));
  app.use('/uploads', express.static(config.root + '/uploads'));

  var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header("Access-Control-Allow-Headers", "Access-Control-Allow-Methods, Access-Control-Allow-Headers, Access-Control-Allow-Origin, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");

    // intercept OPTIONS method
    if ('OPTIONS' == req.method) {
        res.status(204).end();
    }
    else {
        next();
    }
  };

  app.use(allowCrossDomain);

  // don't use logger for test env
  if (process.env.NODE_ENV !== 'test') {
    app.use(express.logger('dev'));
  }

  // set views path, template engine and default layout
  app.engine('html', swig.renderFile);
  app.set('view engine', 'html');
  app.set('views', config.root + '/app/views');
  app.set('view cache', process.env.NODE_ENV !== 'development');

  app.configure(function () {
    // dynamic helpers
    // app.use(function(req,res,next){
    //     req.locals.session = "eeeeeeee";
    //     next();
    // });

    // cookieParser should be above session
    app.use(express.cookieParser());

    // bodyParser should be above methodOverride
    app.use(express.bodyParser());
    app.use(express.methodOverride());

    // express/mongo session storage
    app.use(function(req, res, next) {
        if(!req.cookies['_ga']) {
            next();
        }
        else {
            session({
                secret: 'secrettexthere',
                saveUninitialized: true,
                resave: true,
                store: new MongoStore({
                    url: 'mongodb://localhost/traderdb',
                    db: 'traderdb',
                    collection: 'sessions',
                    auto_reconnect: true
                })
            })(req, res, next);
        }
    });

    // connect flash for flash messages
    app.use(flash());

    app.use(function (req, res, next) {
        res.locals.session = req.session;
        res.locals.req = req;
        next();
    });
    app.use(function(req, res, next) {
        if(!req.cookies['_ga']) {
            next();
        }
        else {
            passport.initialize()(req, res, next);
        }
    });

    //app.use(helpers('app name'));
    //
    // use passport session
    app.use(function(req, res, next) {
        if(!req.cookies['_ga']) {
            next();
        }
        else {
            passport.session()(req, res, next);
        }
    });

    // routes should be at the last
    app.use(app.router);

    // assume "not found" in the error msgs
    // is a 404. this is somewhat silly, but
    // valid, you can do whatever you like, set
    // properties, use instanceof etc.
    app.use(function(err, req, res, next) {
      // treat as 404
      if (~err.message.indexOf('not found')) return next();

      // log it
      console.error(err.stack);

      // error page
      res.status(500).render('500', { error: err.stack });
    });

    // assume 404 since no middleware responded
    app.use(function(req, res, next) {
      res.status(404).render('404', { url: req.originalUrl, error: 'Not found' })
    });

  })
}
我还有另一个关于passport路由定义的文件,如果你想看到的话,但是所有这些都经过测试,并且工作正常

编辑2:

这是我的入口点文件: server.js

/**
 * Module dependencies.
 */

var express = require('express')
  , fs = require('fs')
  , passport = require('passport');

/**
 * Main application entry file.
 * Please note that the order of loading is important.
 */

// Load configurations
// if test env, load example file
var env = process.env.NODE_ENV || 'development'
  , config = require('./config/config')[env]
  , auth = require('./config/middlewares/authorization')
  , mongoose = require('mongoose');

// Bootstrap db connection
mongoose.connect(config.db);

// Bootstrap models
var models_path = __dirname + '/app/models'
fs.readdirSync(models_path).forEach(function (file) {
  require(models_path+'/'+file);
});

// bootstrap passport config
require('./config/passport')(passport, config);

var app = express();
// express settings
require('./config/express')(app, config, passport);

// Bootstrap routes
require('./config/routes')(app, passport, auth);

// Start the app by listening on <port>
var port = 3002;
app.listen(port);
console.log('Express app started on port '+port);

// expose app
exports = module.exports = app;
/**
*模块依赖关系。
*/
var express=require('express')
,fs=require('fs')
,passport=require('passport');
/**
*主应用程序条目文件。
*请注意,装货顺序很重要。
*/
//负载配置
//如果是测试环境,请加载示例文件
var env=process.env.NODE|env | |“development”
,config=require('./config/config')[env]
,auth=require(“./config/middleware/authorization”)
,mongoose=require('mongoose');
//引导数据库连接
mongoose.connect(config.db);
//自举模型
var models\u path=\u dirname+'/app/models'
fs.readdirSync(models\u path).forEach(函数(文件){
需要(模型路径+'/'+文件);
});
//引导passport配置
要求('./config/passport')(passport,config);
var-app=express();
//快速设置
要求('./config/express')(应用程序、配置、护照);
//引导路径
要求(“./config/routes”)(应用程序、护照、身份验证);
//通过监听启动应用程序
var端口=3002;
app.listen(端口);
console.log('Express应用程序在端口'+端口上启动);
//公开应用程序
导出=模块。导出=应用程序;
编辑3:

以下是我的路线定义: config/routes.js

var express = require('express');
var path = require('path');
var fileManager = require('express-file-manager');
var mongoose = require('mongoose');
var Session = mongoose.model('Session');

module.exports = function (app, passport, auth) {
    var users = require('../app/controllers/users');
    var coupons = require('../app/controllers/coupons');
    var magazines = require('../app/controllers/magazines');
    var zones = require('../app/controllers/zones');
    var transactions = require('../app/controllers/transactions');
    var favorites = require('../app/controllers/favorites');
    var banners = require('../app/controllers/banners');
    var reports = require('../app/controllers/reports');
    var coverContest = require('../app/controllers/coverContest');
    var contactMessage = require('../app/controllers/contactMessage');

    app.post('/api/users/login', users.login);
    app.post('/api/users/register', users.register);
    app.post('/api/users/logout', users.logout);
    app.post('/api/users/sendResetEmail', users.sendResetEmail);
    app.post('/api/users/changePassword', users.changePassword);
    app.post('/api/users/redeemCoupon', isValidAppUser(), users.redeemCoupon);
    app.get('/api/users/validate', isLoggedIn(0), function(req, res) {
        res.send(req.user);
    });

    app.post('/api/coupons', coupons.get);
    app.post('/api/coupons/import', isLoggedIn(0), coupons.import);
    app.post('/api/coupons/remove', isLoggedIn(0), coupons.remove);
    app.post('/api/coupons/upload', isLoggedIn(0), coupons.upload);

    app.post('/api/transactions', transactions.get);
    app.post('/api/allTransactions', isLoggedIn(0), transactions.getAll);

    app.post('/api/magazines', magazines.get);
    app.post('/api/magazines/import', isLoggedIn(0), magazines.import);
    app.post('/api/magazines/remove', isLoggedIn(0), magazines.remove);

    app.post('/api/banners', banners.get);
    app.post('/api/banners/import', isLoggedIn(0), banners.import);
    app.post('/api/banners/remove', isLoggedIn(0), banners.remove);

    app.post('/api/favorites', isValidAppUser(), favorites.get);
    app.post('/api/favorites/import', isValidAppUser(), favorites.import);

    app.post('/api/zones', zones.get);
    app.post('/api/zones/add', zones.add);
    app.post('/api/zones/addCoupon', zones.addCoupon);
    app.post('/api/zones/addMagazine', zones.addMagazine);

    app.post('/api/mail/ccSubmit', coverContest.ccSubmit);
    app.post('/api/mail/contactSubmit', contactMessage.contactSubmit);

    //app.get('/api/reports/siteUsers', reports.siteUsers);
    app.get('/auth/facebook', passport.authenticate('facebook', { scope: [ 'email', 'user_about_me'], failureRedirect: '/login' }), users.signin);
    app.get('/auth/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/login' }), users.authCallback);
    app.get('/auth/github', passport.authenticate('github', { failureRedirect: '/login' }), users.signin);
    app.get('/auth/github/callback', passport.authenticate('github', { failureRedirect: '/login' }), users.authCallback);
    app.get('/auth/twitter', passport.authenticate('twitter', { failureRedirect: '/login' }), users.signin);
    app.get('/auth/twitter/callback', passport.authenticate('twitter', { failureRedirect: '/login' }), users.authCallback);
    app.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] }));
    app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/', successRedirect: '/main.html' }));
}

function isLoggedIn(secLvl) {
    return function(req, res, next) {
        if(req.isAuthenticated() && req.user.secLvl <= secLvl && req.user.google.email.includes('@bizpub36.com')) {
            return next();
        }

        res.redirect('https://accounts.google.com/logout');
    }
}

function isValidAppUser() {
    return function(req, res, next) {
        Session.findOne({ sess_id: req.body.sess_id }).exec(function(err, session) {
            if(!err && session) {
                next();
            }
            else {
                res.end({ status: 'error', message: 'invalid session' });
            }
        });
    }
}
var express=require('express');
var path=require('path');
var fileManager=require('express-file-manager');
var mongoose=require('mongoose');
var Session=mongoose.model('Session');
module.exports=函数(应用程序、护照、身份验证){
var users=require('../app/controllers/users');
var优惠券=需要('../app/controllers/tuples');
var杂志=需要('../app/controllers/gazies');
变量区域=需要('../app/controllers/zones');
var transactions=require(“../app/controllers/transactions”);
var favorites=require('../app/controllers/favorites');
var banners=需要(“../app/controllers/banners”);
var reports=require(“../app/controllers/reports”);
var coverContest=require(“../app/controllers/coverContest”);
var contactMessage=require(“../app/controllers/contactMessage”);
app.post('/api/users/login',users.login);
app.post('/api/users/register',users.register);
app.post('/api/users/logout',users.logout);
app.post('/api/users/sendResetEmail',users.sendResetEmail);
app.post('/api/users/changePassword',users.changePassword);
app.post('/api/users/redemedicToucon',isValidAppUser(),users.redemedicToucon);
app.get('/api/users/validate',isLoggedIn(0),函数(req,res){
res.send(请求用户);
});
app.post('/api/coups',coups.get);
app.post('/api/coups/import',isLoggedIn(0),coups.import);
app.post('/api/coups/remove',isLoggedIn(0),coups.remove);
app.post('/api/coups/upload',isLoggedIn(0),coups.upload);
app.post('/api/transactions',transactions.get);
app.post('/api/allTransactions',isLoggedIn(0),transactions.getAll);
app.post('/api/magazies',magazies.get);
app.post('/api/magazies/import',isLoggedIn(0),magazies.import);
app.post('/api/magazies/remove',isLoggedIn(0),magazies.remove);
app.post('/api/banners',banners.get);
app.post('/api/banners/import',isLoggedIn(0),banners.import);
app.post('/api/banners/remove',isLoggedIn(0),banners.remove);
app.post('/api/favorites',isvalidapuser(),favorites.get);
app.post('/api/favorites/import',isvalidapuser(),favorites.import);
app.post('/api/zones',zones.get);
app.post('/api/zones/add',zones.add);
app.post('/api/zones/addCoupon',zones.addCoupon);
app.post('/api/zones/addMagazine',zones.addMagazine);
app.post('/api/mail/ccSubmit',coverContest.ccSubmit);
app.post('/api/mail/contactSubmit',contactMessage.contactSubmit);
//app.get('/api/reports/siteUsers',reports.siteUsers);
app.get('/auth/facebook',passport.authenticate('facebook',{scope:['email',user\u about\u me'],failureRedirect:'/login'}),users.sign);
app.get('/auth/facebook/callback',passport.authenticate('facebook',{failureRedirect:'/login'}),users.authCallback);
app.get('/auth/github',passport.authenticate('github',{failureRedirect:'/login'}),users.signin);
app.get('/auth/github/callback',passport.authenticate('github',{failureRedirect:'/login'}),users.authCallback);
app.get('/auth/twitter)