You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.0 KiB
JavaScript
48 lines
1.0 KiB
JavaScript
3 years ago
|
"use strict";
|
||
|
|
||
|
const Promise = require("bluebird");
|
||
|
const express = require("express");
|
||
|
const path = require("path");
|
||
|
|
||
|
const knex = require("knex")(require("../knexfile"));
|
||
|
|
||
|
let app = express();
|
||
|
|
||
|
app.set("views", path.join(__dirname, "views"));
|
||
|
app.set("view engine", "jsx");
|
||
|
app.engine("jsx", require("@joepie91/express-react-views").createEngine());
|
||
|
|
||
|
app.use(express.static(path.join(__dirname, "../public")));
|
||
|
|
||
|
app.get("/", (req, res) => {
|
||
|
res.redirect("/datasheets");
|
||
|
});
|
||
|
|
||
|
app.get("/datasheets", (req, res) => {
|
||
|
res.render("index");
|
||
|
});
|
||
|
|
||
|
app.post("/search", (req, res) => {
|
||
|
return Promise.try(() => {
|
||
|
return knex.raw(`
|
||
|
SELECT
|
||
|
data->>'manufacturer' AS manufacturer,
|
||
|
data->>'name' AS name,
|
||
|
data->>'url' AS url,
|
||
|
data->>'description' AS description,
|
||
|
data->>'source' AS source
|
||
|
FROM items WHERE
|
||
|
id LIKE 'datasheet:%'
|
||
|
AND lower(data->>'name') LIKE :query
|
||
|
ORDER BY name
|
||
|
LIMIT 20
|
||
|
`, {
|
||
|
query: req.query.query.toLowerCase() + "%"
|
||
|
});
|
||
|
}).then((result) => {
|
||
|
res.json({ results: result.rows });
|
||
|
});
|
||
|
});
|
||
|
|
||
|
module.exports = app;
|