Rumah > Artikel > hujung hadapan web > nodejs melaksanakan mvc
Node.js ialah sumber terbuka, persekitaran masa jalan JavaScript merentas platform. Ia membolehkan kami menulis aplikasi sisi pelayan menggunakan JavaScript. Sangat mudah untuk membangunkan aplikasi sisi pelayan berprestasi tinggi menggunakan Node.js. Dalam artikel ini, kami akan membincangkan cara melaksanakan seni bina MVC menggunakan Node.js.
MVC ialah singkatan kepada Model-View-Controller. Ia adalah corak reka bentuk yang menyusun kod dengan cara yang memisahkan aplikasi dan menjadikan aplikasi mudah untuk diselenggara dan dilanjutkan.
MVC menjadikan kod sangat modular, menjadikannya mudah untuk memfaktor semula dan menyelenggara bahagian aplikasi yang berbeza. Dalam Node.js, kita boleh menggunakan pelbagai rangka kerja untuk membina aplikasi MVC. Dalam artikel ini, kita akan membincangkan cara melaksanakan seni bina MVC menggunakan rangka kerja Express.
Express ialah rangka kerja popular untuk Node.js yang menyediakan alatan dan perisian tengah untuk membina aplikasi web dengan pantas. Kami boleh melaksanakan MVC menggunakan rangka kerja Express.
Pertama, kita perlu memasang rangka kerja Express. Gunakan arahan berikut dalam baris arahan:
npm install express --save
Seterusnya, kita perlu memasang enjin templat. Dalam artikel ini, kami akan menggunakan EJS sebagai enjin templat. Gunakan arahan berikut dalam baris arahan:
npm install ejs --save
Berikut ialah struktur direktori asas:
- app/ - controllers/ - models/ - views/ - public/ - routes/ - app.js
Kami akan membahagikan aplikasi kepada tiga komponen: pengawal, model dan paparan.
Dalam folder Pengawal kami akan mentakrifkan logik pengawal kami. Sebagai contoh, kita boleh mempunyai fail yang dipanggil userController.js yang akan mengendalikan permintaan berkaitan pengguna.
Dalam fail userController.js kami boleh mengeksport objek dan kaedah yang berbeza untuk menggunakannya dalam aplikasi. Berikut ialah contoh:
const User = require('../models/user'); const UserController = {}; UserController.index = (req, res) => { // 获取所有用户 User.getAll((err, users) => { if (err) { console.log(err); return; } // 渲染视图 res.render('users/index', { users }); }); }; UserController.show = (req, res) => { // 获取单个用户 User.getById(req.params.id, (err, user) => { if (err) { console.log(err); return; } // 渲染视图 res.render('users/show', { user }); }); }; module.exports = UserController;
Dalam kod di atas, kami mentakrifkan objek yang dipanggil UserController dan mengeksport dua kaedah: indeks dan tunjukkan. Kaedah ini akan mendapatkan data pengguna dan menghantarnya kepada enjin templat EJS untuk dipamerkan. Kami boleh menggunakan kaedah ini dalam laluan aplikasi kami untuk mengendalikan permintaan pengguna.
Dalam folder model, kami akan mentakrifkan logik lapisan Model. Sebagai contoh, kita boleh mempunyai fail yang dipanggil user.js yang akan menentukan data berkaitan pengguna dan logik perniagaan.
Dalam fail user.js, kita boleh menggunakan rangka kerja ORM (Pemetaan Perhubungan Objek) Node.js untuk menentukan model. Berikut ialah contoh:
const sql = require('../config/db').pool; const User = {}; User.getAll = (callback) => { sql.query('SELECT * FROM users', (err, users) => { if (err) { callback(err, null); return; } callback(null, users); }); }; User.getById = (id, callback) => { sql.query('SELECT * FROM users WHERE id = ?', [id], (err, user) => { if (err) { callback(err, null); return; } callback(null, user[0]); }); }; module.exports = User;
Dalam kod di atas, kami mengeksport objek bernama Pengguna dan mentakrifkan dua kaedah: getAll dan getById. Kaedah ini akan melaksanakan pertanyaan SQL dan menghantar keputusan kembali kepada pengawal.
Dalam folder pandangan kami akan mentakrifkan fail paparan EJS kami. Sebagai contoh, kita boleh mempunyai fail yang dipanggil index.ejs yang memaparkan data untuk semua pengguna.
Berikut ialah contoh:
<h1>All Users</h1> <% if (users && users.length > 0) { %> <ul> <% users.forEach(function(user) { %> <li><a href="/users/<%= user.id %>"><%= user.name %></a></li> <% }); %> </ul> <% } else { %> <p>No users found.</p> <% } %>
Dalam kod di atas, kami akan menggunakan sintaks EJS untuk memaparkan semua pengguna dan mencipta senarai. Kami menghantar data pengguna dalam pengawal dan menjadikannya dalam paparan.
Dalam folder laluan kami akan menentukan laluan untuk aplikasi kami. Dalam fail app.js kami akan mengkonfigurasi perisian tengah kami. Berikut ialah contoh:
const express = require('express'); const app = express(); const router = express.Router(); const UserController = require('./app/controllers/userController'); // 路由 router.get('/', UserController.index); router.get('/users/:id', UserController.show); // 中间件 app.use(express.static('public')); app.use(express.urlencoded({ extended: true })); app.set('view engine', 'ejs'); app.set('views', __dirname + '/app/views'); app.use(router); // 启动服务器 const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server listening on port ${PORT}.`); });
Dalam kod di atas, kami telah menentukan dua laluan: satu untuk memberikan data untuk semua pengguna dan satu lagi untuk memaparkan data untuk seorang pengguna. Kami juga mengkonfigurasi perisian tengah yang membolehkan kami menggunakan enjin templat EJS dan menggunakan fail statik. Akhirnya, kami memulakan pelayan.
Dalam artikel ini, kami melaksanakan seni bina MVC menggunakan rangka kerja Express. Kami membahagikan aplikasi kepada tiga komponen: pengawal, model dan pandangan. Kami juga menggunakan rangka kerja ORM Node.js untuk mentakrifkan model dan enjin templat EJS untuk memaparkan paparan. Akhir sekali, kami menggunakan penghalaan untuk mengendalikan permintaan pengguna dan menghantar data kembali kepada pengawal dan pandangan.
Seni bina MVC Node.js membantu sangat memudahkan penyelenggaraan dan penskalaan aplikasi. Selain itu, rangka kerja Express menyediakan banyak alatan berguna dan perisian tengah yang boleh membantu kami membina aplikasi web dengan lebih pantas.
Atas ialah kandungan terperinci nodejs melaksanakan mvc. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!