好的,所以我不知道该怎么解释。基本上,我正在编写一个简单的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>
这可以使用户在结果页中键入页码并转到下一页。但是,发生的情况是当我发回页码时,搜索查询丢失了。现在,我的解决方案是定义一个全局变量并像这样跟踪查询,但是有适当的方法吗?
我最近已经开始学习后端开发,所以我非常想表达和交流。
答案 0 :(得分:0)
现在我的解决方案是定义一个全局变量并像这样跟踪查询
不要那样做。
您将获得比赛条件。以及交叉用户污染。
只需将查询放入表单中即可。
<input type="hidden" name="query" value="...">