res.render()和res.redirect()的行为类似于res.send()

时间:2017-07-11 17:38:21

标签: javascript html node.js ajax fetch

我正在尝试将fetch用于简单的帖子请求:

const headers = new Headers({
  Accept: 'application/json',
  'Content-Type': 'application/json',
});

fetch('/checkout/billing', {
        headers,
        body,
        credentials: 'include',
        method: 'POST',
      })
      .catch(console.error);

,服务器端端点如下:

if (!validateResult) {
        res.redirect('/checkout/shipping');
      } else {
        view.render('checkout/billing')
      }

因此,当我使用常规HTML表单提交时,它可以正常工作(重定向或渲染),但是当我使用fetch而不是重定向或呈现时,我会收到HTML正文作为响应,就像我会使用res.send(html),知道可能导致此问题的原因吗?

1 个答案:

答案 0 :(得分:1)

TL; DR:它应该按照规范发送HTML

您希望客户端使用JSON,但是您需要一个呈现HTML的路径,这就是您获取HTML的原因。

单词 render 可能有点令人困惑:它来自你有一个模板(可能是html / pug / mustache / ...)的想法,你的服务器将转换成html 。但最后,当您呈现时服务器所做的只是发送最终HTML作为对客户端请求的响应。

因此,如果请求是针对HTML中的视图,那么这将按预期工作。但是如果你想做一个AJAX请求,那么你将会遇到这种奇怪的行为。