2017-02-20 4 views
0

Я новичок в узле js, и вот мой вопрос.Как app.get после перенаправления с использованием выражения в узле js

Я поставил код в app.js для перенаправления после входа в систему на странице входа, как показано ниже,

app.post('/login', function(req, res, next) { 
passport.authenticate('local-login', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.flash("email"); 
    var email_address = req.body.email; 
    var username = email_address.substring(0, email_address.lastIndexOf("@")); 
    global_username = username; 
    return res.redirect('/status.html'+'?channel='+username); 
    })(req, res, next); 
}); 

А теперь я хочу, чтобы получить «/status.html'+'?channel='+ имя пользователя с помощью app.get

Так что я создал такой код,

app.get('/status.html?channel='+ global_username, isLoggedIn, function(req, res){ 
    console.log("Logged in"); 
    var chk_username = req.body.email; 
    var temp = chk_username.substring(0, chk_username.lastIndexOf("@")); 
    if(temp != global_username){return res.json({success: false, message:"Unauthorized Attempt"});} 
}); 

Тем не менее, не проходит через эту функцию app.get .. Я пытался проверить, является ли он зарегистрирован или не используя console.log, но не появился что-нибудь.

У кого-нибудь есть идея исправить эту проблему?

спасибо.

+0

После перенаправляя пользователя, он завершает соединение с сервером, тем самым предотвращая все последующие вызовы маршрутизации. Что вы можете сделать, так это выполнить код, который вы будете делать во время запроса получения до перенаправления. –

+0

@ Theodore_Kim Спасибо за комментарий! :) тогда вы имеете в виду, что я должен поставить «app.get ('/ status.html? channel =' + global_username, isLoggedIn, function (req, res) {" до res.redirect ('/ status.html' + '? channel = '+ username); – paulc1111

+0

Нет, я имею в виду, что после перенаправления клиента завершается процесс ответа, а это означает, что сервер не будет отправлять больше ответов на сервер для этого первоначального запроса. добирайтесь до маршрута GET после перенаправления клиента. Надеюсь, это имеет смысл ... –

ответ

2

Итак, если вы используете global_username как реальную глобальную переменную, это не отличная идея. Это означает, что значение изменяется для всех в любое время, когда кто-либо регистрируется. Я не думаю, что это то, что вы хотите.

Кроме того, на вашем маршруте не должно быть никаких элементов запроса; это обычно не часть маршрутизации, просто материал пути. Я даже не понимаю, что вы пытаетесь сделать в этой функции, честно говоря, но другое, о чем вы должны знать, это то, что в запросе на получение нет никакого тела, поэтому, даже если вы нажмете это промежуточное программное обеспечение, вы не будете получить значение от req.body.

Если все, что вы пытаетесь сделать, это перенаправление на URL, а затем получить доступ к текущему пользователю, то паспорт устанавливает, что в объекте REQ для вас, так что вы могли бы сделать это:

app.get('/status.html, isLoggedIn, function(req, res){ 
    console.log("Logged in"); 
    if (req.user) return res.send({message: 'Success'}); 
    return res.status(401).send({message: 'you are not logged in'}); 
}); 
+0

Спасибо, что ответили на мои вопросы. вопрос! : D hm .. да, ты прав ..: '(Я новичок в этом, поэтому я был немного смущен и пытался выяснить, что я хотел. Lol .. В любом случае, спасибо еще раз и надеюсь, что у вас есть отличный день! :) – paulc1111

+0

Не нужно извиняться, надеюсь, вы сможете отсортировать его на основе наших ответов. – Paul

0

Вы можете сделать что-то вроде этого:

app.post('/login', (req, res, next) => { 
    passport.authenticate('local-login', function(err, user, info) { 
    if (err) return next(err); 
    if (!user) return res.redirect('/login'); 
    req.flash("email"); 
    var email_address = req.body.email; 
    var username = email_address.substring(0, email_address.lastIndexOf("@")); 
    global_username = username; 
    console.log("Logged in"); 
    var chk_username = req.body.email; 
    var temp = chk_username.substring(0, chk_username.lastIndexOf("@")); 
    if(temp != global_username){ 
     res.json({success: false, message:"Unauthorized Attempt"}); 
    }  

    return res.redirect('/status.html'+'?channel='+username); 
    })(req, res, next); 
}); 

res.redirect функция завершает связь между сервером и клиентом. Следовательно, он не достигнет других запросов на маршрутизацию, сделанных для него. В принципе, вы хотите выполнить свой код внутри функции без дополнительного вызова. Вы все равно можете реализовать маршрутизацию GET для вызовов за пределами данного экземпляра.

Смежные вопросы