Expressjs / Node.js - res.redirect// Ne télécharge pas une page

J'ai une page de route
GET /team

, qui télécharge la liste des commandes et
DEL /team

, qui supprime la commande de
/team/:key

. Donc, vous allez sur la page de profil de commande et retirez-la de là, après le retrait, il doit vous rétrécir à la page.
/team

. J'ai placé des magazines dans la console et elle supprime avec succès
team

et étrange, elle dit que les charges
/team

, Mais le navigateur ne le charge pas. J'ai placé mon code ci-dessous, il y a des idées?

Routes:


app.get/'/team'/*, lim/"Must be logged in to see teams"/*/, getAllTeams, function/req, res/{
util.log/'Serving request for url [GET] ' + req.route.path/;
// Pass it the list of all Teams
res.render/'team', {'teamsList' : req.teamsList} /;
}/;

app.get/'/team/:key', function/req, res/ {
util.log/'Serving request for url [GET] ' + req.route.path/;
Team.findByKey/req.params.key, function/err, teamData/{
if/!err && teamData/{
teamData = teamData;
res.render/'teamDetails', { 'teamData' : teamData } /;
} else {
util.log/'Error in fetching Team by key : ' + req.params.key/;
res.json/{
'retStatus' : 'failure',
'msg' : 'Error in fetching Team by key ' + req.params.key
}/;
}
}/;
}/;

/**
* DEL /team/:key
* Delete Team by key
*/
app.del/'/team/:key', getAllTeams, function/req, res/ {
util.log/'Serving request for url [DEL] ' + req.route.path/;
Team.remove/{key : req.params.key}, function/err/{
var message = '';
var retStatus = '';
if /!err/ {
util.log/'Successfully deleting Team with key: ' + req.params.key/;
message = 'Successfully deleting Team with key: ' + req.params.key;
retStatus = 'Success';
res.redirect/'/team'/;
} else {
util.log/'Error deleting Team with key: ' + req.params.key + 'Error: ' + util.inspect/err//;
res.json/{
'retStatus' : 'failure',
'msg' : 'Error in fetching Team with key ' + req.params.key
}/;
}
}/;
}/;


Modèle JavaScript + HTML:


button#teamDelete.btn.btn-danger.btn-mini/type="submit", value="Delete Team"/ Delete
script/type='text/javascript'/
$/'#teamDelete'/.live/'click',function//{
var teamId = #{teamData.key};
$.post/'/team/' + teamId, { _method : 'delete' }, function/response/ {
console.log/response/;
if/response.retStatus === 'Success'/ {
if/'/team' && '/team' !== ""/ {
window.location = '/team';
}
}
}/;
}/;


Journaux préfixaux:


10 Mar 11:52:01 - Serving request for url [GET] /team
10 Mar 11:52:02 - Serving request for url [GET] /team/:key
10 Mar 11:52:03 - Serving request for url [DEL] /team/:key
10 Mar 11:52:03 - Successfully deleting Team with key: 1362855941128
10 Mar 11:52:03 - Serving request for url [GET] /team


getAllTeams:


var getAllTeams = function/req, res, next/{
Team.getAll/function/err, teamsList/{
if/!err && teamsList/{
req.teamsList = teamsList;
return next//;
}
}/;
};


Team.getAll /Régime de commandement/


Team.statics.getAll = function/cb/{
var query = this.find/{}/;
query.sort/{key : -1}/;
return query.exec/cb/;
};
Invité:

Daniel

Confirmation de:

Pour contourner rapidement le problème, ajoutez simplement une redirection url En réponse et du côté du client, faites-le:


if /redirectUrl && redirectUrl !== ""/
window.location = redirectUrl;

Christine

Confirmation de:

Votre demande POST /$. post/, Et votre itinéraire app.del, alors il ne tombe jamais dans res.redirect dans la route app.del.

Pourquoi n'utilisez-vous pas app.post?

Mise à jour

:

Supposons que $. post Envoie la demande HTTP DEL Ici ce qui suit arrive ici: le serveur envoie la réponse 302 Sans aucune donnée, le navigateur n'envoie jamais une autre demande de route GET Sur la spécification du serveur /ou jQuery Traite également les redirections? Pas certain/. res.redirect//- C'est la réponse réelle HTTP, et aucune instruction interne sur le côté serveur redirige la demande à un autre itinéraire que vous pouvez faire dans ASP.NET /Et c'est vraiment faux/... L'itinéraire est destiné à obtenir une demande, répondez à la réponse et à l'oublier. Vous devez séparer les itinéraires des fonctions réelles les traiter, vous pouvez appeler cette fonctionnalité au lieu d'envoyer une redirection.

Offre des codes

DANS app.del/'/team/:key' ...


...
retStatus = 'Success';
// res.redirect/'/team'/;
res.send/{
retStatus : retStatus,
redirectTo: '/team',
msg : 'Just go there please' // this should help
}/;
...


Côté client B. $.post/'/team/' ...


...
$.post/'/team/' + teamId, { _method : 'delete' }, function/response/ {
console.log/response/;
if/response.retStatus === 'Success'/ {
// not sure what did you mean by /'/team' && '/team' !== ""/
// if/'/team' && '/team' !== ""/ {
if /response.redirectTo && response.msg == 'Just go there please'/ {
window.location = response.redirectTo;
}
}
}/;
...


Bien que cela ne soit pas sûr de fonctionner, parce que je ne comprends pas ce que votre
getAllTeams

Et pourquoi gardez-vous
teamList

dans req. Si vous souhaitez stocker des données dans une session, en supposant que l'intermédiaire soit configuré correctement, vous devez utiliser req.session. Si vous avez besoin de le stocker uniquement dans la requête et votre getAllTeams prépare cette liste d'équipes, il vaut mieux le garder dans res.locals /par exemple, res.locals.teamList/.
Et assurez-vous que votre getAllTeams Bagues comme suit. Ainsi, surtout votre getAllTeams Ça devrait ressembler à ça:


function getAllTeams /req, res, next/ {
res.locals.teamList = [/* whatever */];
next//;
}


Et puis vous pouvez utiliser res.locals.teamList Dans son gestionnaire de route à la place req.teamList.


res.render/'team', {teamsList : res.locals.teamsList} /;


Et modèle 'team' peut aussi avoir un problème ...

Consultation expresse :/

De plus, comment vous utilisez Express, Très difficile à développer/Demande de gestion. Je ne me souviens pas exactement d'où, mais quelque part dans les documents, ils écrivent que Express devrait être utilisé comme base de votre cadre d'application, et non comme un cadre complet, comme la plupart des cadres PHP. Cela vous donne une plus grande puissance et une plus grande flexibilité, mais il faut également penser à l'architecture de votre application.

La caractéristique la plus puissante express C'est que vous puissiez avoir une route traitée par de nombreux gestionnaires spécifiques à la route./Les programmes intermédiaires transmettent le contrôle des uns des autres à travers next//. J'ai une table statique qui détermine les manutentionnaires utilisés sur chaque route, ce qui vous permet de voir toute l'application avec 30 Ou donc les itinéraires sur une page. Et cette table est utilisée pour l'assemblage de routage dynamique lorsque l'application est lancée. Cela conduit à une grande flexibilité, à la facilité de gestion. /je peux move/copy-paste Manipulateurs d'itinéraire vers la route - Chaque gestionnaire est représenté par un mot/ et réutiliser le code. J'utilise aussi le même hash Définitions des itinéraires dans le client pour rouler du côté du client.

Pour répondre aux questions, connectez-vous ou registre