【问题标题】:Express res.render not working after redirecting重定向后 Express res.render 不起作用
【发布时间】:2017-08-04 05:36:03
【问题描述】:

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

但是,重定向后,视图contacts/index 不呈现,但是当我简单地转到浏览器并访问http://localhost:3000/contacts 时,它可以正常工作。当我在/contacts 路由中执行console.log(params) 时,它们是正确的,正如我预期的那样。

提前致谢!

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");
               }
          });
     });
});

【问题讨论】:

    标签: javascript node.js ajax express


    【解决方案1】:

    您是否意识到 ajax 调用上的重定向不会导致浏览器执行任何操作?这只是对您的 ajax 调用的 303 响应。如果您愿意,由您的 ajax 代码来处理重定向响应。

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

    【讨论】:

    • @PedroAugusto - 你明白为什么你的服务器端重定向没有做任何事情吗?我的回答试图向您解释这一点,以便您了解发生了什么并告诉您如何进行客户端重定向。
    • 是的。我得到了它。现在我明白为什么它不起作用了。谢谢解释
    【解决方案2】:

    尝试前端重定向:

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

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多