从Express的搜索表单重定向?

时间:2018-10-09 16:00:22

标签: javascript express

我对此并不陌生,在搜索表单中输入术语并重定向到包含结果的新页面后,尝试调用外部API。这就是我到目前为止所拥有的。

const express = require('express');
const request = require('request');
const path = require('path');
const app = express();
const PORT = 3000;
const url =
  'https://www.example.com/api/search_term?query=';

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.listen(PORT, () => {
  console.log(`Example app listening on port ${PORT}!`);
});

app.get('/search', (req, res) => {
  res.render('search', { title: 'Hey', message: 'Hello there!' });
});

app.post('/results', (req, res) => {
  const term = req.body.term;
  request(`${url}term`, (error, response, body) => {
    if (!error && response.statusCode === 200) {
      console.log(body);
    }
  });
});

我的PUG文件现在只是搜索表。由于我正在调用外部api,因此我对从get请求进行重定向感到困惑。

我想加载该应用程序,将搜索表单设置为主页,提交要搜索的字词,然后重定向到包含结果的另一页。

我是否以为我需要重定向到另一条get路由,以便从包含搜索表单的初始get路由中“抢走”结果,所以我错了

1 个答案:

答案 0 :(得分:1)

  

我是否以为我需要重定向到另一个“获取”包含搜索表单的初始“获取”路由结果的获取路由?

是的,你是

您需要两条路由,完全不需要重定向。

  1. 提供HTML表单的路线
  2. 读取提交的表单数据并返回HTML格式的搜索结果的路径

浏览器应请求第二条路由,因为其URL是在表单的action属性中指定的。

console.log(body);应该替换为对res.render的调用,其中包括要在模板中呈现的搜索结果。