繁体   English   中英

如何使用Express.js为单页应用程序正确设置路由?

[英]How do I properly set routes up for a Single Page App using Express.js?

我正在尝试使用Express.js构建单页应用程序。 在我的index.html页面上,我有一个基本表单,提交后会向API发出请求,检索数据,解析数据,然后我想将解析后的数据呈现为链接列表。 现在我能够呈现索引页面,并且我可以从我添加到页面的表单中对API进行提交调用。 我感到困惑的是如何正确地重定向我从API调用获得的数据,然后在同一页面上呈现它。 在有多个视图之前我使用Express构建了简单的应用程序,但从来没有一个页面应用程序。 对于那些应用程序,我知道对于响应,您可以调用类似res.render('要呈现的视图名称',数据),但在这种情况下不起作用。 我试图通过这个网站和Express文档找到一些解决方案,但我还没有看到任何不包括使用像Angular这样的其他框架的东西。 出于这个应用程序的目的,我不需要包含任何其他框架,我有点迷失。

我调用API的函数现在看起来像这样。 当它被调用时,我被定向到一个只显示json的页面

app.use(express.static(path.join(__dirname, '/public')));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use('/', express.static(path.join(__dirname, 'public')));

app.get('/search', function(req, res) {
  var title = req.query.movieTitle;
  var url = 'http://www.omdbapi.com/?s=' + title;

  request(url, function (err, response, body) {
    var results = JSON.parse(body);
    var movieTitles = results.Search;
    console.log(movieTitles);
    res.send(movieTitles);
  });
});

你要做的基本事情是:

  • 定义您的后端应用程序必须使用spa响应的路由
  • 将“skeleton”文件发送到该路由上的响应

示例代码:

const handler = (req, res) => res.send(path.join(__dirname, "path/to/your/index.html"))

const routes = ["/", "/hello", "/world"]

routes.forEach( route => app.get(route, handler) )

这应该让你开始

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM