【问题标题】:Cannot redirect to another page in PUT request for Node无法重定向到节点的 PUT 请求中的另一个页面
【发布时间】:2016-10-10 14:52:58
【问题描述】:

我第一次使用 Node 和 Express 来制作一个简单的网站,对数据库进行 CRUD 操作。当我发出 put 请求时,我无法让页面重定向到“/index”,并且我已经运行了 express 调试器并且没有看到任何异常,页面根本没有改变。有什么想法吗?这是 server.js 中的代码

app.set('view engine', 'ejs')

app.all('/', function(req,res){
  var cursor = db.collection('jobs').find().toArray(function(err, results) {
     res.render('index.ejs', {jobs: results})
    })
})

app.get('/index',function (req, res) {
    res.sendFile(__dirname + '/index.html');
})


app.get('/view',function (req, res) {
    var cursor = db.collection('jobs').find().toArray(function(err, results) {

     res.render('index.ejs', {jobs: results})

    })
})

app.post('/jobs', function(req, res) {
    db.collection('jobs').save(req.body,function(err, result){
    if (err) return console.log(err)

    console.log('saved to database');
    res.redirect('/view');
  })
})

app.put('/view', function(req, res) {
    res.redirect(303, '/index');

})

【问题讨论】:

  • 您如何发出 PUT 请求?您如何测试“要更改的页面”?
  • 我认为问题是带有 PUT 的 http 状态 303。尝试更改为 302 或不使用任何内容。
  • @LucasCosta — 302 是个坏主意,客户端应该使用相同的请求方法。 OP 可能不希望客户端向/ 发出 PUT 请求。 (我不明白他们为什么希望客户向/view 而不是/view/a-specific-thing 制作一个)。
  • @Quentin 我使用 fetch api 在另一个名为 index.ejs 的文件中发出 put 请求。我能够测试 fetch 和 put 工作正常以更新数据库记录现在我只是想测试在 put 请求通过后重新加载当前页面(/view)。我正在通过提交发出 put 请求的按钮后查看页面是否重新加载来进行测试。
  • @user2466886 — 你为什么希望页面重新加载?您正在使用 fetch API。 Ajax 的重点是在不离开页面的情况下从 JavaScript 发出 HTTP 请求

标签: javascript node.js express


【解决方案1】:

HTTP 重定向只是告诉客户端从其他地方获取它所请求的数据。它并没有告诉它以任何不同的方式对待它。

如果您发出 Ajax 请求并获得重定向响应,则浏览器将默默地跟随该重定向并将新 URL 的内容返回给您的 JavaScript。

浏览器不会看到重定向并决定在视口中加载新页面,而不是将数据呈现给您的 JavaScript。

如果您想在发出 PUT 请求后加载新页面,那么您需要等待响应进来,然后(例如)为 window.location.href 分配一个新值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多