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,而只是渲染视图或返回数据。