通过app.post触发的Express res.render

4

在由express应用程序生成器创建的存根内,我创建了一个名为test的新视图。

我无法使用以下方式调用test

app.post('/test', function(req, res, next) {
    res.render('test');
});

这似乎很惊奇,因为下面的app.get正在按预期呈现:

app.get('/test', function(req, res, next) {
    res.render('test');
});

我尝试了以下方法,但仍然无法呈现页面:
app.post('/test', function(req, res, next) {
    console.log('within app.post'); // this is getting logged
    res.redirect('/test');
});

请帮忙。如何从 post 方法中渲染 test


1
你如何发起POST请求? - vanadium23
@vanadium23...我正在使用jQuery $.ajax({url:"/test",type:"POST"}) - Kaya Toast
尝试将一些 JSON 发送回 res.send({ some: 'json' }); 以确定这是模板问题。 - vanadium23
@vanadium23...我尝试发送json回去,但是在客户端出现了这个错误'Uncaught SyntaxError: Unexpected token o'...但请注意模板正常工作(因为app.get呈现了模板)。 - Kaya Toast
3个回答

3

很可能是 JavaScript 代码出了问题。我将以下代码添加到 routes 文件夹中的 index.js 文件中,并且模板正在渲染:

router.get('/test', function(req, res, next) {
    res.render('index', {title: 'GET test'});
});

router.post('/test', function(req, res, next) {
    res.render('index', {title: 'POST test'});
});

尝试通过curl发送请求:
curl -v -XPOST http://localhost:3000/test

或者使用 Chrome 或 Firefox 扩展程序发出请求。

我认为问题出在我使用 $.ajax 调用 POST 的方式上... 移除 contentType: "application/json" 对我来说解决了这个问题。谢谢。 - Kaya Toast
@KayaToast 我也遇到了同样的问题,你能描述一下你是如何解决它的吗? - 01axel01christian

0

看起来你对redirectrender感到困惑,据我所知,你需要有一个路由器方法来呈现所需的页面,每当你想要着陆在该页面时,你可以使用redirect调用。例如:

// This will render the index.html page
app.get('/login', function(req,res) {
  res.render('index.html');
});

// This will redirect to above page
app.post('/homepage', function(req,res) {
  res.redirect('/login');
});

这是问题的进一步搜索。顶部有一个res.render的示例。 - vanadium23
我是指使用不同的路由路径。根据您的示例,您使用了相同的路径来呈现和重定向。用户获取动词以呈现页面,而POST则重定向到该页面。 - Priyanshu
1
@PriyanshuShekhar 刚刚尝试了一下,没有渲染。谢谢。 - Kaya Toast
我使用 redirect 时遇到了以下错误:UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Can't set headers after they are sent. - Ryan Walker

0

我不确定这是否是最佳实践,但你确实希望每个路由的渲染都在一个地方。我使用.all()来处理页面渲染,无论是否已发布内容。

app.post('/test', function(req, res, next) {
  // Do something with posted data
  next();
})
app.all('/test', function(req, res) {
  // res.render the page
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接