Express res.renderredirect后无法工作

我正在使用Ajax向我的服务器发出PUT http请求。 我在/contact/:id'处理请求,然后redirect到'/contacts'

然而,redirect后,视图contacts/index不渲染,但当我只是去浏览器,并访问http://localhost:3000/contacts ,它完美的作品。 当我做console.log(params)/contacts路线,他们是正确的,因为我希望是。

提前致谢!

app.js:

 var path = require('path'); var express = require('express'); var load = require('consign'); var bodyParser = require('body-parser'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var app = express(); app.set('view engine', 'ejs'); app.use(cookieParser()); app.use(session({secret: 'ntalk', resave: false, saveUninitialized: true})); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use('/public', express.static('public')); app.listen(3000, function(){ console.log("Running"); }); // Routes app.post('/enter', function(req,res){ var name = req.body.user.name; var email = req.body.user.email; if(name && email){ var user = req.body.user; usuario['contacts'] = []; req.session.user = user; res.redirect('/contacts'); } else{ res.redirect('/'); } }); app.get('/contacts', function(req,res){ var user = req.session.user; var contacts = user.contacts; var params = { user: user, contacts: contacts }; console.log(params); res.render('contacts/index', params); }); app.put('/contact/:id', function(req,res){ var user = req.session.user; var contacts = req.body.contact; var id = req.params.id; user.contacts[id] = contact; res.redirect(303, '/contacts'); }); 

AJAX:

 $(document).ready(function() { $("#editForm").submit(function(e){ e.preventDefault(); var data = { contact: { name: $("#name").val(), email: $("#email").val() } }; $.ajax({ type: 'PUT', url: '/contact/' + $("input:first").val(), data: data, success: function(){ console.log("Edited"); } }); }); }); 

尝试前端redirect:

 $.ajax({ type: 'PUT', url: '/contact/' + $("input:first").val(), data: data, success: function(){ console.log("Edited"); location = '/contacts'; //this is the redirect } }); 

你知道一个Ajax调用redirect不会导致浏览器做任何事情吗? 这只是对你的ajax调用的303响应。 这取决于你的ajax代码,如果你想要做redirect响应。

如果您希望浏览器页面发生变化,那么从PUT获取响应的代码就可以从ajax响应中获取redirect的URL,并设置window.location以使浏览器页面实际发生更改。

PUT请求上的redirect与PUTredirect,您的路由映射到GET。 你不应该redirect,而只是渲染视图或返回数据。