エクスプレス・ルータが呼び出されるたびに関数を実行したい。レンダリングする前に関数を実行するエクスプレス・ルータを取得するNodeJS
私は関数を単にapp.get
関数の中に置くことができたことは知っていますが、同じ関数を複数回呼び出す必要があります。ここで
は私router.jsがファイルです: ここ
var Setting = require('../models/setting');
module.exports = function(app, passport) {
// =====================================
// HOME PAGE (with login links) ========
// =====================================
app.get('/', function(req, res) {
Setting.findOne(function(err, setting) {
if (err)
throw err;
// console.log(setting);
res.render('index', { title: 'eduBird | Reach the glory', setting: setting }); // load the index file
});
});
// =====================================
// LOGIN ===============================
// =====================================
// show the login form
app.get('/login', sabSettings, function(req, res) {
// render the page and pass in any flash data if it exists
res.render('login', {
message: req.flash('loginMessage'),
errors: req.flash('error'),
title: 'Login | eduBird',
setting: setting
});
});
// process the login form
app.post('/login', passport.authenticate('local-login', {
successRedirect: '/profile',
failureRedirect: '/login',
failureFlash: true
}));
// =====================================
// SIGNUP ==============================
// =====================================
// show the signup form
app.get('/signup', function(req, res) {
// render the page and pass in any flash data if it exists
res.render('signup', {
message: req.flash('signupMessage'),
errors: req.flash('error'),
title: 'Register | eduBird',
setting: req.setting
});
});
// process the signup form
app.post('/signup', passport.authenticate('local-signup', {
successRedirect: '/profile',
failureRedirect: '/signup',
failureFlash: true
}));
// app.post('/signup', function(req, res) {
// console.log(req);
// });
// =====================================
// PROFILE SECTION =====================
// =====================================
// we will want this protected so you have to be logged in to visit
// we will use route middleware to verify this (the isLoggedIn function)
app.get('/profile', isLoggedIn, sabSettings, function(req, res) {
res.render('profile', {
user: req.user, // get the user out of session and pass to template
title: req.user.local.name + "'s profile | eduBird",
setting: req.setting
});
});
// =====================================
// LOGOUT ==============================
// =====================================
app.get('/logout', function(req, res) {
req.logout();
res.redirect('/');
});
};
// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {
// if user is authenticated in the session, carry on
if (req.isAuthenticated())
return next();
// if they aren't redirect them to the home page
res.redirect('/login');
};
function sabSettings(next) {
Setting.findOne(function(err, setting) {
if (err)
throw err;
console.log('sabSetting function executed');
console.log(setting);
console.log('~~~~~~~~~~~');
// return setting;
return next(setting);
});
};
は私が細かい実行されているisLoggedIn
の例を使用していたが、同じことが、すべての設定の設定を渡すことになるsabSettings()
のために働くことができませんデータベースから、私の/login
、/signup
、/profile
および/または/
すべてのルート。
console.log(setting)
throw er; // Unhandled 'error' event
^
TypeError: next is not a function
at C:\Users\animeshweb\Desktop\projects\eb-v2\routes\routes.js:106:16
あなたは、私が同じを取得するためapp.get('/')
に機能を組み込みましたことを見ることができますが、私はこれをしたいです私が望むところで実行される関数なので、私はそのための別の関数が必要です。
要求されたとして、私は私のroutes.jsを更新
更新:
function sabSettings(req, res, next) {
Setting.findOne(function(err, setting) {
if (err)
next(err);
console.log('sabSetting function executed');
console.log(setting);
console.log('~~~~~~~~~~~');
req.setting = setting;
next();
});
};
また、上記のSetting = require(myModelURL)
を作成しました。これは、細かい作業ではroute.get'/'
です。
*これは私の見解/ layout.pugのfile`
おかげadminlayout0.pugで正常に動作している
link(rel='icon', type='image/png', href=setting.logo.logo16 sizes='16x16')
link(rel='icon', type='image/png', href=setting.logo.logo32 sizes='32x32')
link(rel='icon', type='image/png', href=setting.logo.logo128 sizes='128x128')
同じです。
述べたように私はそれらに私の 'sabsettingを()'更新: 関数sabSettings(REQ、RES、次){ Setting.findOne(関数(ERR、設定){ (ERR) はconsole.log場合を( 'sabSetting function executed'); console.log(設定); console.log( '~~~~~~~~~~~~~~~~'); req.setting =設定; next(); }) ; }; それでも、 'プロパティー'のロゴは未定義です。 'というエラーが表示されます。質問に.pugビューを追加しました。 –
私は自分の質問を更新しましたが、route.js 'sabsetting()'にもっと不足しているものがありますか? –
@AnimeshSingh - 'setting'変数を見て、それに希望の' setting.logo'プロパティがあるかどうかを確認しましたか?そして、 'res.render()'を呼び出すときに、 'setting:setting'の代わりに' setting:req.setting'を渡す必要があります。 – jfriend00