Security News
tea.xyz Spam Plagues npm and RubyGems Package Registries
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
hapi-query-builder
Advanced tools
Readme
Hapi-query-builder is a Hapi.js plugin. It is an ambitious attempt to create a kind of "URL" to "Mongoose/mongodb query" translator which provides a mongoose/mongodb query for GET API. It provides facilities to the developer to pass query params in URL and get the mongoos/mongodb query.
You can add the module to your Hapi using npm:
npm i hapi-query-builder --save
node: >= 18.x.x,
hapi: >= 21.x.x
In your Hapi apps server
object simply add hapi-query-builder
and also add
the routes for your API as described on the hapijs.com site.
const Hapi = require('@hapi/hapi');
(async () => {
try{
const server = await new Hapi.Server({
host: 'localhost',
port: 3000,
});
await server.register({
plugin: require('hapi-query-builder'),
options: {
defaultSelectField: '_id', // (optional)- Pass field name for default select if $select is empty
},
});
server.route({
method: 'GET',
path: '/query',
handler: function (request, h) {
return {
query: request.parsedQuery,
};
},
});
await server.start();
console.log('Server running at:', server.info.uri);
} catch (err) {
console.error(err);
process.exit(1);
}
})();
You just pass query in query params form Front-end in request.
const axios = require('axios');
const response = axios.get('/user?email=example@email.com&$limit=10&$skip=1&$sort=updatedAt|-1');
You can get mongoose query in handler in hapi.js
handler: function (request, h) {
query: request.parsedQuery,
};
// example response
{"where":{"email":"example@email.com"},"options":{"lean":true,"offset":1,"limit":10,"sort":{"updatedAt":"-1"}}}
Passing DB field name (Get all record where field match with value)
- GET /api-path?field1=value&field2=value&.....fieldn=value
- Ex /user?_id=5ff48a66070a2466418e6adc&email=example@email.com
- Result {"where":{"_id":"5ff48a66070a2466418e6adc","email":"example@email.com"},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Passing DB field name ($or condition for mongodb)
- GET /api-path?$or=field1|value,field2|value,.....,fieldn|value
- Ex /user?$or=_id|5ff48a66070a2466418e6adc,email|example@email.com
- Result {"where":{"$or":[{"_id":"5ff48a66070a2466418e6adc"},{"email":"example@email.com"}],"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Passing DB field name with space in $select
- GET /api-path?$select=field1 field2 field3..... fieldn
- Ex /user?$select=_id email title name
- Result {"where":{},"options":{"select":"_id email title name","lean":true,"offset":0,"limit":20,"sort":{}}}
Passing search text with DB fields name with pip operator in $q
- GET /api-path?$q=text|field1,field2....fieldn
- Ex /user?$q=amjesh|email,name
- Result {{"where":{"$or":[{"email":{"$regex":"amjesh","$options":"i"}},{"name":{"$regex":"amjesh","$options":"i"}}]},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Passing DB field name and search value with pip operator in $search
- GET /api-path?$search=field|value,field1|value,....fieldn|value
- Ex /user?$search=name|Amjesh,email|amjesh@example.com
- Result {"where":{"name":{"$regex":/Amjesh/}},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Passing DB field name and search value with pip operator in $isearch
- GET /api-path?$isearch=field|value,field1|value,...fieldn|value
- Ex- /user?$isearch=name|Amjesh,email|amjesh@example.com
- Result {"where":{"name":{"$regex":/amjesh/,"$options":"i"}},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Passing modal with comma separated in $populate
- GET /api-path?$populate=modal1,modal2,....modaln
- Ex /user?$populate=post,comment
- Result {"where":{},"options":{"populate":["post","comment"],"lean":true,"offset":0,"limit":20,"sort":{}}}
Passing DB field name for shorting in $sort
For Ascending pass value 1 or asc and
For Descending pass value -1 or desc any one
- GET /api-path?$sort=field1|1,field2|1
- Ex /user?$sort=updatedAt|1,_id|1
- Result {"where":{},"options":{"lean":true,"offset":0,"limit":20,"sort":{"updatedAt":"1","_id":"1"}}}
OR
- GET /api-path?$sort=field1|-1,field2|-1
- Ex /user?$sort=updatedAt|-1,_id|-1
- Result {"where":{},"options":{"lean":true,"offset":0,"limit":20,"sort":{"updatedAt":"-1","_id":"-1"}}}
Skip record for pagination in $skip(By default it's 0)
- GET /api-path?$skip=value
- Ex /user?$skip=1
- Result {"where":{},"options":{"lean":true,"offset":1,"limit":20,"sort":{}}}
Passing limit for total number of record for pagination in $limit.
You can pass defaultLimit in plugin option
- GET /api-path?$limit=value
- Ex /user?$limit=100
- Result {"where":{},"options":{"lean":true,"offset":0,"limit":100,"sort":{}}}
Get all records where the value does $in(In) or does not $nin(Not-in) match from values
- GET /api-path?field[$in]=value1,value2.....valuen
- Ex /user?id[$in]=10,11,12,13,14
- Result {"where":{"id":{"$in":["10","11","12","13","14"]}},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Get all records where the value does $gt(Greater then) or does not $gte(Greater then equal to) match from value
- GET /api-path?field[$gt]=value
- Ex /user?comment[$gt]=100
- Result {"where":{"comment":{"$gt":"100"}},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Get all records where the value does $lt(Less then) or does not $lte(Less then equal to) match from value
- GET /api-path?field[$lt]=value
- Ex /user?likes[$lt]=100
- Result {"where":{"likes":{"$lt":"100"}},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
Get all records where the value does $ne(not equal to) match from value
- GET /api-path?field[$ne]=value
- Ex /user?archive[$ne]=true
- Result {"where":{"archive":{"$ne":true}},"options":{"lean":true,"offset":0,"limit":20,"sort":{}}}
FAQs
The hapi-query-builder hapi.js to get all query from url and create mongodb query.
The npm package hapi-query-builder receives a total of 56 weekly downloads. As such, hapi-query-builder popularity was classified as not popular.
We found that hapi-query-builder demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
Security News
As cyber threats become more autonomous, AI-powered defenses are crucial for businesses to stay ahead of attackers who can exploit software vulnerabilities at scale.
Security News
UnitedHealth Group disclosed that the ransomware attack on Change Healthcare compromised protected health information for millions in the U.S., with estimated costs to the company expected to reach $1 billion.