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