Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cvburgess/sqldatasource
SQL DataSource for Apollo GraphQL projects
https://github.com/cvburgess/sqldatasource
apollo apollo-server datasources graphql javascript knex nodejs sql
Last synced: about 6 hours ago
JSON representation
SQL DataSource for Apollo GraphQL projects
- Host: GitHub
- URL: https://github.com/cvburgess/sqldatasource
- Owner: cvburgess
- License: mit
- Created: 2018-10-31T18:54:12.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2023-04-24T16:30:26.000Z (over 1 year ago)
- Last Synced: 2025-01-03T14:13:32.606Z (8 days ago)
- Topics: apollo, apollo-server, datasources, graphql, javascript, knex, nodejs, sql
- Language: JavaScript
- Size: 947 KB
- Stars: 236
- Watchers: 10
- Forks: 39
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# SQLDataSource
This package combines the power of [Knex] with the ease of use of [Apollo DataSources].
## BREAKING CHANGES IN v1.0.0
In v1.0.0 this lib has a new fluid interface that plays nicely with Knex and stays more true to the spirit of Apollo DataSources.
```js
const query = this.knex.select("*").from("fruit").where({ id: 1 }).cache();query.then(data => /* ... */ );
```To use ( or not use ) the caching feature in v1, simply add `.cache()` to your Knex query.
Read more below about getting set up and customizing the cache controls.
## Getting Started
### Installation
To install SQLDataSource: `npm i datasource-sql`
### Usage
```js
// MyDatabase.jsconst { SQLDataSource } = require("datasource-sql");
const MINUTE = 60;
class MyDatabase extends SQLDataSource {
getFruits() {
return this.knex
.select("*")
.from("fruit")
.where({ id: 1 })
.cache(MINUTE);
}
}module.exports = MyDatabase;
```And use it in your Apollo server configuration:
```js
// index.jsconst MyDatabase = require("./MyDatabase");
const knexConfig = {
client: "pg",
connection: {
/* CONNECTION INFO */
}
};// you can also pass a knex instance instead of a configuration object
const db = new MyDatabase(knexConfig);const server = new ApolloServer({
typeDefs,
resolvers,
cache,
context,
dataSources: () => ({ db })
});
```### Caching ( .cache( ttl ) )
If you were to make the same query over the course of multiple requests to your server you could also be making needless requests to your server - especially for expensive queries.
SQLDataSource leverages Apollo's caching strategy to save results between requests and makes that available via `.cache()`.
This method accepts one OPTIONAL parameter, `ttl` that is the number of seconds to retain the data in the cache.
The default value for cache is `5 seconds`.
Unless [configured](https://www.apollographql.com/docs/apollo-server/data/data-sources/#using-memcachedredis-as-a-cache-storage-backend), SQLDataSource uses an InMemoryLRUCache like the [RESTDataSource].
## SQLDataSource Properties
SQLDataSource is an ES6 Class that can be extended to make a new SQLDataSource and extends Apollo's base DataSource class under the hood.
( See the Usage section above for an example )
Like all DataSources, SQLDataSource has an initialize method that Apollo will call when a new request is routed.
If no cache is provided in your Apollo server configuration, SQLDataSource falls back to the same InMemoryLRUCache leveraged by [RESTDataSource].
### context
The context from your Apollo server is available as `this.context`.
### knex
The knex instance is made available as `this.knex` or `this.db`.
## Debug mode
To enable more enhanced logging via [knex-tiny-logger], set `DEBUG` to a truthy value in your environment variables.
## NPM 7 note
While peer dependencies are not installed by default for NPM 6, [v7 will create a tree which could have peerDependencies added correctly](https://github.com/npm/rfcs/blob/main/implemented/0025-install-peer-deps.md).
## Contributing
All contributions are welcome!
Please open an issue or pull request.
[knex]: https://knexjs.org/
[apollo datasources]: https://www.apollographql.com/docs/apollo-server/features/data-sources.html
[dataloader]: https://github.com/facebook/dataloader
[inmemorylrucache]: https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-caching
[restdatasource]: https://www.apollographql.com/docs/apollo-server/features/data-sources.html#REST-Data-Source
[knex-tiny-logger]: https://github.com/khmm12/knex-tiny-logger