Introduction to Keystone
Keystone is a powerful and flexible framework that offers robust APIs for building dynamic websites, applications, and more. In this guide, we explore some of its most useful APIs with practical examples and snippets. By the end, you’ll be equipped to leverage Keystone to its fullest potential in your projects.
Getting Started with Keystone
To set up Keystone, you first need to install it through npm:
npm install --save @keystonejs/keystone npm install --save @keystonejs/adapter-mongoose
Defining Your Schema
Keystone uses a schema to define the types of data your application will use. Here’s an example of defining a simple schema:
const { Keystone } = require('@keystonejs/keystone'); const { Text } = require('@keystonejs/fields'); const { MongooseAdapter } = require('@keystonejs/adapter-mongoose'); const keystone = new Keystone({ name: 'My Keystone App', adapter: new MongooseAdapter({ mongoUri: 'mongodb://localhost/my-database' }), }); keystone.createList('User', { fields: { name: { type: Text }, email: { type: Text }, }, });
Creating and Configuring Routes
In Keystone, you can create custom routes to handle various requests. Here’s an example of setting up a custom route:
const { GraphQLServer } = require('@keystonejs/app-graphql'); const { AdminUIApp } = require('@keystonejs/app-admin-ui'); const { StaticApp } = require('@keystonejs/app-static'); const keystone = new Keystone({ name: 'My Keystone App', adapter: new MongooseAdapter({ mongoUri: 'mongodb://localhost/my-database' }), }); keystone.createList('Post', { fields: { title: { type: Text }, content: { type: Text }, }, }); // Custom Route keystone.extendGraphQLSchema({ mutations: [ { schema: 'createPost(title: String, content: String): Post', resolver: async (item, { title, content }, context) => { return context.prisma.post.create({ data: { title, content, }, }); }, }, ], }); module.exports = { keystone, apps: [ new GraphQLServer(), new AdminUIApp({ enableDefaultRoute: true }), new StaticApp({ path: '/', src: 'public' }), ], };
Implementing Authentication
Authentication is crucial for securing your application. Here’s how to set up basic authentication in Keystone:
const { PasswordAuthStrategy } = require('@keystonejs/auth-password'); keystone.createList('User', { fields: { name: { type: Text }, email: { type: Text, isUnique: true }, password: { type: Password }, }, }); keystone.createAuthStrategy({ type: PasswordAuthStrategy, list: 'User', });
Example Application
Here is a complete example of a small application using the aforementioned APIs:
const { Keystone } = require('@keystonejs/keystone'); const { Text, Password } = require('@keystonejs/fields'); const { MongooseAdapter } = require('@keystonejs/adapter-mongoose'); const { PasswordAuthStrategy } = require('@keystonejs/auth-password'); const { GraphQLServer } = require('@keystonejs/app-graphql'); const { AdminUIApp } = require('@keystonejs/app-admin-ui'); const keystone = new Keystone({ name: 'My Keystone App', adapter: new MongooseAdapter({ mongoUri: 'mongodb://localhost/my-database' }), }); keystone.createList('User', { fields: { name: { type: Text }, email: { type: Text, isUnique: true }, password: { type: Password }, }, }); keystone.createList('Post', { fields: { title: { type: Text }, content: { type: Text }, }, }); keystone.createAuthStrategy({ type: PasswordAuthStrategy, list: 'User', }); module.exports = { keystone, apps: [ new GraphQLServer(), new AdminUIApp({ enableDefaultRoute: true }), ], };
With these examples, you can begin to create powerful applications using Keystone. The flexibility and extensibility of Keystone make it an excellent choice for both small and large projects.
Hash: 4cc7a4b341d8ce3315ea112ebb01e664bd328e88781db0f4bbc0e3f65e201bf9