Node.js ve Express gibi Backend Frameworks ile bütünleme
Table of Contents
Node.js ve Express gibi Backend Frameworks ile JavaScript'i bütünleştirmek.
JavaScript'i hem müşteri hem de sunucu tarafında kullanma yeteneği temel olarak modern web gelişimini yeniden şekillendirmiştir. Node.js, bu mümkün olan runtime ortamı sağlarken, Express sağlam API'ler ve web sunucularının inşa ettiği ince, kesintisiz bir çerçeve sunar. Birlikte, geliştiricilerin tüm yığın boyunca tek bir dil kullanarak ölçeklenebilir, gerçek zamanlı uygulamalar sağlar.
Bu makale tam entegrasyon alanını kapsar: verileri, orta dikkatleri, güvenlik, test ve dağıtımları işlemek için bir temel oluşturmaktan sonra, mimar üretim-okuy backends ile Node.js ve Express ile nasıl bağlantı kuracağınızı ve onları ön uç JavaScript ile nasıl bağlayacağını anlayabilirsiniz.
Node.js ve Express Anlamak
[FONT:0]Node.js[[Dönetici: 1 ) Açık kaynak, Chrome'un V8 JavaScript motoru üzerinde inşa edilmiş bir zaman.
[FONT=0)Express, uygulamanızı uygun gördüğünüz gibi oluşturmak için en popüler web çerçevesidir. Bu, web sunucuları ve API'leri oluşturmak için en az sayıda özellik sunar.
Resmi Express belgelerine göre[Dönetici:0)[Dönetici: 0,3) çerçeve “hızlı, önemsiz, minimalist”dir. Bu felsefe hala karmaşık, tam başarılı uygulamalara izin verirken öğrenilebilir.
Neden Birlikte Node.js ve Express kullanın?
- [FONT:0)Üye Olmayan Dil: [Dönderin ve geri dönüşteki JavaScript, bağlam geçişini azaltır ve kod paylaşımını sağlar (örneğin, geçerlilik mantığı, hizmetleri).
- [FONT:0) Hayırlı I/O: Node.js, ağır iplik olmadan birçok eş zamanlı bağlantıları etkin bir şekilde ele alır.
- [FONT=0)Rich ekosistemi:[Dönetici:[Dönetici:0) npm, veritabanı sürücülerinden kütüphaneleri doğrulamasına kadar yüzlerce binlerce paket sunar.
- [FONT:0) Gerçek zamanlı yetenekleri:[Döneticiler için WebSockets için inşa edilmiş destek:0) Doğal olarak Express ile entegre eder.
Bir Üretim Hazırlığı Oluşturmak -Ready Server
Node.js'ı [[0) Bir bağımlılık olarak Express yükleyin: Geliştirme için, aynı zamanda dosyayı otomatik olarak yeniden başlatmanız için [[Gücevdeler: Şimdi minimum sunucu ile anFLULLT:5 oluşturun: Uygulamayı farklı ortamlarda etkinleştirir - dağıtım için en iyi uygulama. AİLRAD:8) Bir dosyadan çevresel değişkenleri yüklemek için paketi kullanın: Bir dosya oluşturun: [Üye: 9)) Üstteki konfigürasyonu yükleyin: Bu model kodbase'iniz için hassas veriler tutar ve yapılandırma yönetimini basitleştirir. Ortaware işlevleri, Express uygulama mantığının bina bloklarıdır. İstek nesnesine, yanıt nesnesine ve [[Ücretsizce: 15) yanıt nesnesine erişim sağlamaktadır. Ortak kullanım koşulları, giriş, doğrulama, talep organları ve hataları ele almaktadır. Express birkaç yerleşik orta dikkat fonksiyonu sağlar: JSON parsing ile örnek: Kendi ortaware yazıp yeniden kullanılabilir mantık oluşturun. Örneğin, bir istek logger: İş önemlidir: Ortaware, tanımlandığında yapılır.Her zaman dört parametre ile son derece hataya yerleştirir: Haritaları ücretsiz olarak yönlendirme Haritaları HTTP yöntemleri ve eller işlevlerine yol açıyor. Temiz bir yönlendirme yapısı kullanılabilirliği ve ölçeklenebilirliği artırır. Daha büyük uygulamalar için, güzergahları [[DÜDÜŞÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜN Sonra, Âdem'in (a.s.) Bu yaklaşım giriş noktanızı mantıksal olarak gruplandırılıyor. Çoğu geri dönüşler devam etmek için gereklidir. Popüler NoSQL ve SQL veritabanı Node.js ile iyi bir şekilde entegre eder. Mongoose'yi MongoDB için bir tasarım: Sunucu dosyasında bağlantı: Bir şema ve model (örneğin, [[Dönetici:) Yollarınızda modeli kullanın: İlişkisel veritabanı için, [[ŞUYGÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜN Bir havuz oluşturun ve sorgu oluşturun: A ORM gibi bir ORM kullanmayı düşünün:0)Sequelize) veya ).Knex) daha soyutlanmış etkileşimler için. Geri dönüş API uç noktaları aracılığıyla veri servis ettiğinde, ön JavaScript onları Axios gibi API veya kütüphaneleri kullanarak kullanabilir. Express API'niz akıp gidiyor gibi. Bir müşteri-ön senaryosu (örneğin, Reaktif, Vue veya düz HTML) verileri alabilir: Ön ve geri dönüş farklı limanlarda veya alanlarda olduğunda, Cross- ⁇ Kaynak Paylaşımı (CORS) paketini yükleyin: Sonra onu orta olarak kullanın: Üretim için, belirli kökenleri yapılandırın: Geri entegrasyon güvenlik endişelerini ortaya koyar. Bu uygulamaları uygulama: Helmet ile Örnek: Örnek with rate Limit: Üretim uygulamaları sağlam bir hata işlemeye ihtiyaç duyar. Giriş hataları ve tutarlı cevaplar döndürür merkezi bir hata-katılım ortalığı yaratın. Giriş için, gelişimde ve üretimde [[Ücretsizlik” gibi daha yapılandırılmış bir logger kullanın: Geri dönüşünüzün beklendiği gibi davranılması için testler yazın. Popüler test çerçeveleri Jest ve Mocha.For HTTP entegrasyon testleri için, kullanım [[0] Supertest[DDDDDDDDDDDDDDDDD) Dev bağımlılıklar yükleyin: Test dosyası oluşturun::56. Not: Uygulamanın test sırasında liman çatışmalarından kaçınmayı dinleyen sunucudan uygulama tanımı.Uygulamayı paylaşın ve dosyayı doğrudan çalıştırdığınızda dinleyin: Node.js+Express geri uçup bu yönergeleri takip ettiğinizde: Ortak bir dağıtım modeli, müşteri tarafından yapılan yönlendirmeleri desteklemek için geri dönüş ve önyüklemek, HTTPS üzerinden API ile iletişim kurmaktır. Alternatif olarak, önyükleme dosyaları ExpressULLT:59 kullanarak ExpressULLT:59 ile hizmet edebilirsiniz. Node.js tek hazır, ancak hala doğru stratejilerle yüksek aktarım yapabilirsiniz: Depresyon ile Örnek: Express, iki yönlü, etkinlik odaklı iletişim sağlamak için sorunsuz bir şekilde entegre eder. Bu, sohbet uygulamaları, canlı bildirimleri ve işbirliği araçları için idealdir. Hem HTTP hem de WebSocket desteği ile sunucu oluşturun: Ön uç bu WebSocket sunucusuna bağlanabilir ve www.D:66) kütüphane kullanarak olaylara yayılabilir. Temel entegrasyon ötesinde, birçok takım Node.js, Express ve bir ön plana sahip çerçeveyi bir kohesive yığınına kabul eder.En yaygın olanı ise [[Dönetici[Dönder:0)IMERN[DÜye, Express, Rede.js). Bu yığınlar, geliştiricilerin veritabanından UI'ye tam uygulamaları oluşturmalarına izin verir, genellikle paylaşılan modeller ve türleri ile. Örneğin, Mongoose şemaları arka uçta tanımlayabilirsiniz ve aynı geçerlilik mantığını bir form kütüphanesine dönüştürmeden sonra yeniden kullanabilirsiniz. Node.js ve Express ile JavaScript'in bütünleştirilmesi, yalnızca her iki tarafta benzer görünümlü kod yürütmekle ilgili değildir - çeşitli proje gereksinimlerine adapte olmak için JavaScript'in ekosisteminin tam gücünü kullanmakla ilgilidir. Bu teknikleri ustaca, geri dönüş ve ön uç arasındaki yanlış eşleştirmeyi ortadan kaldırabilirsiniz, gelişim döngüleri hızlandırıp bu ölçekleri ölçen uygulamaları dağıtabilirsiniz: Yeni bir proje başlat, orta dikkat ile deney, bir veritabanı bağlamak ve entegrasyonun hayata geçmesini görmek için zaman.mkdir my-backend
cd my-backend
npm init -ynpm install expressnpm install -D nodemonconst express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});Ortam Değişkenleri Ekle
npm install dotenvPORT=5000
DB_CONNECTION_STRING=mongodb://localhost:27017/myapprequire('dotenv').config();Ortaware: The Heart of Express
Yapılı Ortaware
app.use(express.json());
app.post('/api/users', (req, res) => {
console.log(req.body); // Access parsed JSON
res.json({ success: true });
});Özel Ortaware
const logger = (req, res, next) => {
console.log(`${req.method} ${req.url} - ${new Date().toISOString()}`);
next();
};
app.use(logger);app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Something broke!' });
});Routing and RESTful APIs
Temel Routing
app.get('/api/items', (req, res) => {
// return list of items
});
app.post('/api/items', (req, res) => {
// create new item
});
app.put('/api/items/:id', (req, res) => {
const { id } = req.params;
// update item with given id
});
app.delete('/api/items/:id', (req, res) => {
// delete item
});ExpressVPN for modülerity için kullanım
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.json([{ id: 1, name: 'Sample Item' }]);
});
router.post('/', (req, res) => {
// create logic
});
module.exports = router;const itemsRouter = require('./routes/items');
app.use('/api/items', itemsRouter);Bir Veritabanına Bağlanma
Mongoose ile Mongoose
npm install mongooseconst mongoose = require('mongoose');
mongoose.connect(process.env.DB_CONNECTION_STRING)
.then(() => console.log('Connected to MongoDB'))
.catch(err => console.error('Connection error', err));const mongoose = require('mongoose');
const itemSchema = new mongoose.Schema({
name: { type: String, required: true },
price: Number,
created_at: { type: Date, default: Date.now }
});
module.exports = mongoose.model('Item', itemSchema);const Item = require('./models/Item');
app.post('/api/items', async (req, res) => {
try {
const item = new Item(req.body);
await item.save();
res.status(201).json(item);
} catch (err) {
res.status(400).json({ error: err.message });
}
});PostgreSQL with node-postgres
npm install pgconst { Pool } = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL
});
app.get('/api/users', async (req, res) => {
const result = await pool.query('SELECT * FROM users');
res.json(result.rows);
});Frontend-Backend Entegrasyon
Express'ten Fetching
fetch('http://localhost:3000/api/items')
.then(response => {
if (!response.ok) throw new Error('Network response error');
return response.json();
})
.then(data => {
console.log('Items:', data);
// render data on page
})
.catch(err => console.error('Fetch error:', err));KURUMSALS
npm install corsconst cors = require('cors');
app.use(cors()); // Allows all origins – restrict in productionapp.use(cors({
origin: 'https://your-frontend-domain.com',
methods: ['GET', 'POST']
}));Güvenlik En İyi Uygulamaları
const helmet = require('helmet');
app.use(helmet());const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100
});
app.use('/api', limiter);Hata işleme ve Logging
// Custom error handler
const errorHandler = (err, req, res, next) => {
console.error('Error:', err.message);
const statusCode = err.statusCode || 500;
res.status(statusCode).json({
error: err.message,
stack: process.env.NODE_ENV === 'development' ? err.stack : undefined
});
};
app.use(errorHandler);npm install morgan winstonconst morgan = require('morgan');
app.use(morgan('dev'));Bütünleşmeyi Test Etmek
Jest ve Supertest ile Örnek
npm install -D jest supertestconst request = require('supertest');
const app = require('./index'); // export app from index.js
describe('GET /api/items', () => {
it('responds with JSON array', async () => {
const res = await request(app)
.get('/api/items')
.expect('Content-Type', /json/)
.expect(200);
expect(Array.isArray(res.body)).toBe(true);
});
});if (require.main === module) {
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
}
module.exports = app;İşsizlik
Performans Optimizasyonu Performans Optimizasyonu
const compression = require('compression');
app.use(compression());WebSockets ile Gerçek Zaman İletişim
npm install socket.ioconst http = require('http');
const socketIo = require('socket.io');
const server = http.createServer(app);
const io = socketIo(server, { cors: { origin: '*' } });
io.on('connection', (socket) => {
console.log('New client connected');
socket.on('disconnect', () => console.log('Client disconnected'));
});
server.listen(PORT, () => console.log(`Server with WebSocket on port ${PORT}`));Full-Stack Frameworks ve Desenler
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç