如何在后端Express函数中访问当前url中的参数? (请参阅说明)

时间:2019-01-07 08:54:32

标签: javascript node.js express backend ejs

好的,所以我不知道该怎么解释。基本上,我正在编写一个简单的Express应用程序,该应用程序请求omdb api搜索电影标题并返回结果。现在,omdb api将结果作为页面发送回,每页10个结果。

这是我的app.js文件

let express = require("express");
let app = express();
let request = require("request");

app.set("view engine", "ejs");

let query = "";
let page = 1;

app.get("/", (req, res) => {
    res.render("search");
});

app.get("/results", (req, res) => {
    if(req.query.search){
        query = req.query.search;
    }
    if(req.query.page){
        page = req.query.page;
    }else{
        page = 1;
    }
    console.log(query);
    console.log(page);
    let url = "http://omdbapi.com/?apikey=thewdb&s=" + query + "&page=" + page;
    request(url, (error, response, body) => {
        if(!error && response.statusCode == 200){
            let data = JSON.parse(body);
            res.render("results", {data: data});
        }
    });
});

app.listen(process.env.PORT, process.env.IP, () => {
    console.log("Server Started");
});

这是我的search.ejs文件

<h1>Search for a Movie</h1>

<form action="/results" method="GET">
    <input type="text" placeholder="search term" name="search">
    <input type="submit">
</form>

这是我的results.ejs文件

<h1>Results of Search</h1>

<ul>
    <% data["Search"].forEach((movie) => { %>
        <li> 
            <strong><%= movie["Title"] %></strong> - <%= movie["Year"] %> 
        </li>
    <% }); %>
</ul>

<form action="/results" method=GET>
    <input type="text" name="page" placeholder="Page">
    <input type="submit">
</form>

<a href="/">Search Again</a>

这可以使用户在结果页中键入页码并转到下一页。但是,发生的情况是当我发回页码时,搜​​索查询丢失了。现在,我的解决方案是定义一个全局变量并像这样跟踪查询,但是有适当的方法吗?

我最近已经开始学习后端开发,所以我非常想表达和交流。

1 个答案:

答案 0 :(得分:0)

  

现在我的解决方案是定义一个全局变量并像这样跟踪查询

不要那样做。

您将获得比赛条件。以及交叉用户污染。


只需将查询放入表单中即可。

<input type="hidden" name="query" value="...">