From 0bc5022fb2f6e8465f3ba87691a839d4c23c5817 Mon Sep 17 00:00:00 2001 From: Jonasz Bigda Date: Tue, 21 Jul 2020 19:40:27 +0200 Subject: [PATCH] Autocomplete --- loaders/express.js | 4 +++- routes/routeSearch.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 routes/routeSearch.js diff --git a/loaders/express.js b/loaders/express.js index 9db8a35..931d81c 100644 --- a/loaders/express.js +++ b/loaders/express.js @@ -6,6 +6,7 @@ import routeDish from "../routes/routeDish.js"; import routeCity from "../routes/routeCity.js"; import routeRestaurant from "../routes/routeRestaurant.js"; import routeUser from "../routes/routeUser.js"; +import routeSearch from "../routes/routeSearch.js"; import routeImg from "../routes/routeImg.js"; import cookieParser from "cookie-parser"; @@ -15,9 +16,9 @@ export default ({ app, secret }) => { max: 100, //requests from a single IP for a time window }); + app.use(cors()); app.use(helmet()); app.use(limiter); - app.use(cors()); app.use(bodyParser.json({ limit: "100kb" })); // limit JSON body payload size app.use(bodyParser.urlencoded({ extended: true })); app.use(function (err, req, res, next) { @@ -29,6 +30,7 @@ export default ({ app, secret }) => { app.use("/restaurant", routeRestaurant); app.use("/img", routeImg); app.use("/user", routeUser); + app.use("/search", routeSearch); return app; }; diff --git a/routes/routeSearch.js b/routes/routeSearch.js new file mode 100644 index 0000000..00908bd --- /dev/null +++ b/routes/routeSearch.js @@ -0,0 +1,37 @@ +import express from "express"; +import * as services from "../services/services.js"; +import Restaurant from "../models/restaurant.js"; +import sanitizer from "string-sanitizer"; +import restaurant from "../models/restaurant.js"; + +var router = express.Router(); + +// AUTOCOMPLETE + +router.get("/autocomplete/", (req, res) => { + var query = sanitizer.sanitize.keepUnicode(decodeURI(req.query.string)); + const regex = new RegExp(query, "i"); + let cities = new Set(); + let restaurants = new Set(); + + Restaurant.find( + { $or: [{ city: { $regex: regex } }, { name: { $regex: regex } }] }, + "name city", + (err, doc) => { + if (err) { + res.send(404); + } else { + doc.forEach((value) => { + cities.add(value.city); + restaurants.add(value.name); + }); + res.send({ + cities: Array.from(cities), + restaurants: Array.from(restaurants), + }); + } + } + ).limit(10); +}); + +export default router;