2015-04-27 2 views
3

Внутри заглушки, созданной express application generator, я создал новый вид под названием test.Express res.render, вызванный app.post

Я не могу вызвать 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'); 
}); 

Pl облегчить помощь. Как я могу сделать test из почтового метода?

+1

Как вы делаете запрос POST? – vanadium23

+0

@ vanadium23 ... Я использую jquery '$ .ajax ({ url:"/test ", Тип:" POST "})' –

+0

Попробуйте отправить json обратно в res.send ({some: ' json '}); чтобы определить, что это проблема шаблона. – vanadium23

ответ

3

Возможно, есть проблема с кодом javascript. Я добавить код в файл 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 -v -XPOST http://localhost:3000/test 

Или использовать хром или расширение Firefox, чтобы сделать запрос.

+0

Я думаю, проблема была в том, как Я вызвал POST с использованием $ .ajax ... Удаление 'contentType:" application/json "' разрешил его для меня. Благодарю. –

+0

@KayaToast У меня такая же проблема, можете ли вы описать, как вы ее решили? – 01axel01christian

0

Похоже, вы получаете путать с redirect и render, согласно моему знанию вы должны иметь один метод маршрутизатора, который будет оказывать нужную страницу и каждый раз, когда вы хотите земли на этой странице, вы можете использовать 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'); 
}); 
+0

Это еще одна проблема. В верхней части приведен пример res.render. – vanadium23

+0

Я имею в виду использование разных маршрутов маршрута. Поскольку вы в своем примере используете один и тот же путь для рендеринга и redirect.user, получите глагол, чтобы отобразить страницу и отправить ее перенаправление. –

+1

@PriyanshuShekhar Пробовал это прямо сейчас. Не рендеринг. Спасибо –

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 
}); 
Смежные вопросы