gpt4 book ai didi

node.js - 使用 Express 进行重定向和渲染

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:34 25 4
gpt4 key购买 nike

当我点击 api 时,我想将我的网址从 https://myapp.herokuapp.com/token/aaa.bbb.ccc 重定向到 https://myapp.herokuapp .com/messages/:id。我还想渲染我的 message View

代码:

app.get('/token/:id' , (req, res) => {
var decoded = jwt.verify(req.params.id, 'blabla');
Message.findById(decoded.messageId, (err, message) => {
if (err) res.json({error: err})
res.render('message', {message})
})
})

在这里,我成功渲染了我的 message View ,但以下 api 的 URL 仍然是 https://myapp.herokuapp.com/token/aaa.bbb.ccc 而不是 https://myapp.herokuapp.com/messages/:id

另一次尝试:

app.get('/token/:id' , (req, res) => {
var decoded = jwt.verify(req.params.id, 'blabla');

Message.findById(decoded.messageId, (err, message) => {
if (err) res.json({error: err})
res.redirect('/messages/'+message._id)
})
})

现在,URL 为 https://myapp.herokuapp.com/messages/:idmessage View 未呈现。呈现一个显示消息的 JSON

如何重定向到 https://myapp.herokuapp.com/messages/:id 并渲染 message View ?

最佳答案

您应该首先重定向:

app.get('/token/:id' , (req, res) => {
var decoded = jwt.verify(req.params.id, 'blabla');

Message.findById(decoded.messageId, (err, message) => {
if (err) return res.json({error: err}); // see @partycoder's answer
res.redirect('/messages/'+message._id)
})
})

接下来,您需要调整 /messages/:id 的路由处理程序。现在,听起来它只用于 XHR 请求,所以它总是返回 JSON。您可以添加检查以查看请求是否是 XHR 请求,并返回 JSON(对于 XHR)或呈现的模板(对于非 XHR):

app.get('/messages/:id', (req, res) => {
...
if (req.xhr) {
return res.json(...);
} else {
return res.render(...);
}
});

( documentation for req.xhr ,请注意,其所基于的方法并非万无一失)

但是,也许最好使用内容协商,其中客户端明确告诉服务器响应应该是什么格式。这样做的好处是它更加明确,缺点是您可能必须更改一些客户端代码。此处的文档:http://expressjs.com/en/4x/api.html#res.format

关于node.js - 使用 Express 进行重定向和渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43861030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com