53 lines
1.7 KiB
JavaScript
53 lines
1.7 KiB
JavaScript
|
const app = require("express")();
|
||
|
const db = require("./db");
|
||
|
const port = process.env.PORT || 8080;
|
||
|
|
||
|
const sep = `<br /><br />`;
|
||
|
|
||
|
function genListing(row) {
|
||
|
return `<a href="${row.url}">
|
||
|
<span style="font-size: 1.5em">${row.title || row.url}</span>
|
||
|
<br />
|
||
|
<span style="font-size: 1em">${row.url}</span>
|
||
|
</a>`;
|
||
|
}
|
||
|
|
||
|
function searchBar(query = "") {
|
||
|
return `<form action="/search">
|
||
|
<input type="text" value="${query}" name="q" placeholder="search here!" />
|
||
|
</form>`;
|
||
|
}
|
||
|
|
||
|
function offsetButton(query, offset, limit, text) {
|
||
|
return `<a href="?q=${query}&o=${offset}&l=${limit}">${text}</a>`;
|
||
|
}
|
||
|
|
||
|
app.get("/", (req, res) => {
|
||
|
res.send(searchBar());
|
||
|
});
|
||
|
|
||
|
app.get("/search", (req, res) => {
|
||
|
const query = req.query.q;
|
||
|
const offset = +req.query.o || 0;
|
||
|
const limit = +req.query.l || 50;
|
||
|
const next = offsetButton(query, offset + limit, limit, "Next");
|
||
|
const prev = offsetButton(query, offset - limit, limit, "Prev");
|
||
|
const page = (offset / limit) + 1;
|
||
|
|
||
|
db.all("SELECT url, title FROM page_search(?) ORDER BY rank LIMIT ?, ?",
|
||
|
req.query.q, offset, limit, (err, rows) => {
|
||
|
res.send(`
|
||
|
${searchBar(query)}
|
||
|
${prev} ${page} ${next}
|
||
|
${sep}
|
||
|
${rows.map(genListing).join(sep)}
|
||
|
${sep}
|
||
|
${prev} ${page} ${next}
|
||
|
`);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
app.listen(port, () => {
|
||
|
console.log(`Running at http://127.0.0.1:${port}/`);
|
||
|
});
|