Takip et

Node.js ile GraphQL, Redis, JWT ve Sequelize Kullanarak Başlangıç Projesi Oluşturma

Node.js ile GraphQL, Redis, JWT ve Sequelize Kullanarak Başlangıç Projesi Oluşturma

Merhaba, bugün size Node.js ile GraphQL, Redis, JWT ve Sequelize kullanarak bir başlangıç projesi nasıl oluşturabileceğinizi göstereceğim. Bu teknolojilerin bir kombinasyonunun, ölçeklenebilir, güvenli ve verimli uygulamalar oluşturmak için nasıl kullanılabileceğini öğreneceksiniz.

Giriş

Node.js, JavaScript tabanlı bir sunucu tarafı çalışma zamanıdır. GraphQL, API’ler için bir sorgu dilidir. Redis, bir bellek içi veri deposudur. JWT, kullanıcı kimlik doğrulaması için kullanılan bir standarttır. Sequelize, Node.js uygulamaları için bir ORM’dir.

Proje Yapısı

Projemiz, her biri belirli bir görevi yerine getiren birkaç farklı katmandan oluşacaktır:

  • Sunucu: Node.js uygulamasının temelini oluşturur ve diğer katmanları bir araya getirir.
  • GraphQL: API uç noktalarımızı tanımlar ve sorgu çözümlemesini yönetir.
  • Veritabanı: Verilerimizi depolamak için Sequelize ile PostgreSQL kullanacağız.
  • Redis: Oturum yönetimi ve önbelleğe alma için kullanacağız.
  • JWT: Kullanıcı kimlik doğrulamasını yönetmek için kullanacağız.

Kurulum

Öncelikle projemiz için gerekli olan paketleri yüklememiz gerekiyor. Bunu, terminalde aşağıdaki komutu çalıştırarak yapabilirsiniz:

“`bash
npm install express graphql sequelize pg redis jwt-simple
“`

Ardından, projeyi oluşturmak için aşağıdaki dosya yapısını kullanabilirsiniz:

“`
└── index.js
└── src
├── db
│ └── models
│ └── User.js
├── auth
│ └── auth.js
├── resolvers
│ └── index.js
└── schema
└── schema.js

“`

Veritabanı

Sequelize kullanarak PostgreSQL veritabanımızı oluşturacağız. Öncelikle veritabanı bağlantı bilgilerinizi `.env` dosyasına ekleyin:

“`
DB_HOST=localhost
DB_NAME=your_database_name
DB_USER=your_database_user
DB_PASSWORD=your_database_password
“`

Daha sonra, `src/db/models/User.js` dosyasında kullanıcı modelini tanımlayın:

“`javascript
const { DataTypes } = require(‘sequelize’);
const sequelize = require(‘../config/database’);

const User = sequelize.define(‘User’, {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
});

module.exports = User;
“`

GraphQL Şeması

GraphQL şeması, API’mizi tanımlar ve sorgu yapılabilecek türleri ve çözümleri tanımlar. `src/schema/schema.js` dosyasında şemalarımızı tanımlayalım:

“`javascript
const { GraphQLObjectType, GraphQLString, GraphQLSchema, GraphQLID, GraphQLList } = require(‘graphql’);
const User = require(‘../db/models/User’);

const UserType = new GraphQLObjectType({
name: ‘User’,
fields: () => ({
id: { type: GraphQLID },
name: { type: GraphQLString },
email: { type: GraphQLString },
}),
});

const RootQuery = new GraphQLObjectType({
name: ‘RootQueryType’,
fields: {
users: {
type: new GraphQLList(UserType),
resolve(parent, args) {
return User.findAll();
},
},
user: {
type: UserType,
args: { id: { type: GraphQLID } },
resolve(parent, args) {
return User.findByPk(args.id);
},
},
},
});

module.exports = new GraphQLSchema({
query: RootQuery,
});
“`

GraphQL Çözümleri

GraphQL çözümleri, istekleri işler ve verileri geri döndürür. `src/resolvers/index.js` dosyasında çözümlerimizi tanımlayalım:

“`javascript
const User = require(‘../db/models/User’);
const { AuthenticationError } = require(‘apollo-server-express’);
const jwt = require(‘jsonwebtoken’);

const resolvers = {
Query: {
users: async (parent, args) => {
return User.findAll();
},
user: async (parent, args) => {
return User.findByPk(args.id);
},
},
Mutation: {
createUser: async (parent, args) => {
const { name, email, password } = args;
try {
const user = await User.create({ name, email, password });
return user;
} catch (error) {
throw new Error(‘Kullanıcı oluşturulamadı.’);
}
},
loginUser: async (parent, args) => {
const { email, password } = args;
const user = await User.findOne({ where: { email } });
if (!user || !(await user.validatePassword(password))) {
throw new AuthenticationError(‘Geçersiz e-posta veya şifre.’);
}
const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET, { expiresIn: ‘1h’ });
return { token };
},
},
};

module.exports = resolvers;
“`

Kimlik Doğrulama

JWT kullanarak kullanıcı kimlik doğrulaması gerçekleştireceğiz. `src/auth/auth.js` dosyasında bir kimlik doğrulama aracı tanımlayalım:

“`javascript
const jwt = require(‘jsonwebtoken’);

const authMiddleware = (req, res, next) => {
const authHeader = req.headers.authorization;
if (authHeader) {
const token = authHeader.split(‘ ‘)[1];
jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) {
return res.sendStatus(403);
}
req.user = user;
next();
});
} else {
next();
}
};

module.exports = authMiddleware;
“`

Redis

Redis’i oturumu yönetmek ve önbelleğe alma için kullanacağız. `index.js` dosyasında Redis bağlantısını kurabiliriz:

“`javascript
const redis = require(‘redis’);
const client = redis.createClient({
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
});

client.on(‘error’, (err) => console.log(‘Redis bağlantı hatası:’, err));
“`

Sunucu

Son olarak, Node.js sunucumuzu `index.js` dosyasında oluşturalım:

“`javascript
const express = require(‘express’);
const { ApolloServer } = require(‘apollo-server-express’);
const { graphqlHTTP } = require(‘express-graphql’);
const schema = require(‘./src/schema/schema’);
const resolvers = require(‘./src/resolvers’);
const authMiddleware = require(‘./src/auth/auth’);
const redis = require(‘redis’);
const client = redis.createClient();

const app = express();
const port = process.env.PORT || 4000;

app.use(authMiddleware);

const server = new ApolloServer({
typeDefs: schema,
resolvers,
context: ({ req }) => ({ req }),
});

server.applyMiddleware({ app });

app.listen(port, () =>
console.log(`Sunucu ${port} portunda dinleniyor. GraphQL’ye şu adresten erişebilirsiniz: http://localhost:${port}${server.graphqlPath}`)
);
“`

Sonuç

Bu makalede, Node.js ile GraphQL, Redis, JWT ve Sequelize kullanarak nasıl bir başlangıç projesi oluşturabileceğinizi gösterdik. Bu teknolojilerin bir kombinasyonunun, ölçeklenebilir, güvenli ve verimli uygulamalar oluşturmak için nasıl kullanılabileceğini gördünüz.

Kaynaklar

Sonuç

Node.js ile GraphQL, Redis, JWT ve Sequelize kullanarak oluşturduğunuz başlangıç projesi, size güçlü bir temel sağlayacaktır. Bu teknolojileri kullanarak daha karmaşık ve özel uygulamalar geliştirebilirsiniz. Daha fazla bilgi için fatihsoysal.com web sitesini ziyaret edebilirsiniz.

#Etiketler
Node.js, GraphQL, Redis, JWT, Sequelize, Başlangıç Projesi, API, Veritabanı, Kimlik Doğrulama, Önbelleğe Alma

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık