поэтому с этого момента я буду создавать проект разработки API, который будет курсовым проектом, таким как создание внутреннего интерфейса веб-сайта, такого как udemy.
ПРИМЕЧАНИЕ: при выполнении npm init поставьте точку входа как server.js
точка входа: (index.js) server.js
- в первую очередь
npm init npm install express dotenv npm i -D nodemon
2. на package.json скрипты как
"scripts": { "start": "NODE_ENV=production node server", "dev": "nodemon server" },
теперь, прежде чем идти дальше, поскольку мы установили dot env, теперь мы можем использовать переменную среды, чтобы получить порт и среду, которая является разработкой или производством,
create a folder named 'config' in root and in that folder create a file named 'config.env'
в config.env добавить
NODE_ENV=development PORT = 5000
теперь снова войдите в root и создайте файл с именем «server.js» и добавьте
const express = require('express'); const dotenv = require('dotenv'); // Load env vars dotenv.config({ path: './config/config.env' }); const app = express(); app.listen(); const PORT = process.env.PORT || 5000; app.listen(PORT,console.log(`server running in ${process.env.NODE_ENV} mode on PORT ${PORT}`));
теперь в консоли вы увидите, если вы используете make npm start и npm run dev
в npm run dev — сервер работает в режиме разработки на ПОРТ 5000
в npm start — сервер работает в рабочем режиме на порту 5000
это потому, что если вы видите в package.json, мы установили переменные для производства и разработки в server. js мы получаем доступ к этим переменным среды через process.env
теперь съел server.js после
const app = express();
вам нужно добавить
app.get('/', (req,res) => { res.json({name:'prakash'}); })
теперь, если вы сделаете запрос на http://localhost:5000, вы получите ответ json, вместо json вы также можете написать html и отправить строку в кавычках, и, конечно, вам нужно запустить npm run dev
не стесняйтесь экспериментировать с
res.json({name:'prakash'}); res.sendStatus(400); res.status(200).json({success:true,data:{ id:1 }});
перейдите на server.js и добавьте новый свежий код, приведенный ниже, который показывает простой способ использования get, put, post, delete
const express = require('express'); const dotenv = require('dotenv'); // Load env vars dotenv.config({ path: './config/config.env' }); const app = express(); app.get('/api/v1/bootcamps', (req,res) => { res.status(200).json({success:true,msg:'show all bootcamps'}); }) app.get('/api/v1/bootcamps/:id', (req,res) => { res.status(200).json({success:true,msg:`get bootcamp ${req.params.id}`}); }) app.post('/api/v1/bootcamps', (req,res) => { res.status(200).json({success:true,msg:'create new bootcamp'}); }) app.put('/api/v1/bootcamps/:id', (req,res) => { res.status(200).json({success:true,msg:`update bootcamp ${req.params.id}`}); }) app.delete('/api/v1/bootcamps/:id', (req,res) => { res.status(200).json({success:true,msg:`delete bootcamp ${req.params.id}`}); }) app.listen(); const PORT = process.env.PORT || 5000; app.listen(PORT,console.log(`server running in ${process.env.NODE_ENV} mode on PORT ${PORT}`));
попробуйте поэкспериментировать с этим кодом в postman, но очевидно, что мы не будем использовать этот же код для дальнейшей разработки, так как добавление такого количества кода в один файл может стать утомительным, поэтому мы будем использовать некоторые эффективные методы.
create a folder named 'routes' in root and in that folder create a file named 'bootcamps.js'
в bootcamps.js добавить
const express = require('express'); const router = express.Router(); router.get('/', (req,res) => { res.status(200).json({success:true,msg:'show all bootcamps'}); }) router.get('/:id', (req,res) => { res.status(200).json({success:true,msg:`get bootcamp ${req.params.id}`}); }) router.post('/', (req,res) => { res.status(200).json({success:true,msg:'create new bootcamp'}); }) router.put('/:id', (req,res) => { res.status(200).json({success:true,msg:`update bootcamp ${req.params.id}`}); }) router.delete('/:id', (req,res) => { res.status(200).json({success:true,msg:`delete bootcamp ${req.params.id}`}); }) module.exports = router;
и в server.js замените весь код этим
const express = require('express'); const dotenv = require('dotenv'); // Load env vars dotenv.config({ path: './config/config.env' }); // Route files const bootcamps = require('./routes/bootcamps'); const app = express(); // Mount routers app.use('/api/v1/bootcamps', bootcamps); const PORT = process.env.PORT || 5000; app.listen(PORT,console.log(`server running in ${process.env.NODE_ENV} mode on PORT ${PORT}`));
так что теперь, как вы уже догадались, мы разделили все наши маршруты в другом файле, тем самым создав представление для нашего проекта, переменная bootcamps в server.js загружает маршруты в bootcamps.js, как в module.exports = router; мы экспортировали метод маршрутизатора, небольшой пример стандартизации нашего кода, теперь давайте приступим к созданию контроллеров
create a folder named 'controllers' in root and in that folder create a file named 'bootcamps.js'
в controllers/bootcamps.js добавить
exports.getBootcamps = (req,res,next) => { res.status(200).json({success:true,msg:'show all bootcamps'}); } exports.getBootcamp = (req,res,next) => { res.status(200).json({success:true,msg:`get bootcamp ${req.params.id}`}); } exports.createBootcamp = (req,res,next) => { res.status(200).json({success:true,msg:'create new bootcamp'}); } exports.updateBootcamp = (req,res,next) => { res.status(200).json({success:true,msg:`update bootcamp ${req.params.id}`}); } exports.deleteBootcamp = (req,res,next) => { res.status(200).json({success:true,msg:`delete bootcamp ${req.params.id}`}); }
и замените код routes/bootcamps.js на
const express = require('express'); const { getBootcamps, getBootcamp, createBootcamp, updateBootcamp, deleteBootcamp, } = require('../controllers/bootcamps'); const router = express.Router(); router.route('/').get(getBootcamps).post(createBootcamp); router .route('/:id') .get(getBootcamp) .put(updateBootcamp) .delete(deleteBootcamp); module.exports = router;
шаблон MVC в средах веб-разработки следует правилу, что маршруты не должны выполнять какую-либо обработку или логическое кодирование, все эти вещи должны выполняться в контроллерах, поэтому мы разделили часть кода предыдущих маршрутов, создав наши контроллеры
теперь давайте перейдем к промежуточному программному обеспечению
Промежуточное программное обеспечение — это функция, которая имеет доступ к циклу ответа на запросы и работает в течение этого цикла. Все наши промежуточные функции принимают три вещи: запрос, ответ и следующее.
В server.js добавьте
const logger = (req,res,next) => { req.hello = 'hello world'; console.log('middleware run'); next(); } app.use(logger);
и в controllers/bootcamps.js замените предыдущий getbootcamps на
exports.getBootcamps = (req,res,next) => { res.status(200).json({success:true,msg:'show all bootcamps', hello: req.hello }); }
так что это просто пример того, как работает промежуточное ПО
create a folder named 'middleware' in root and in that folder create a file named 'logger.js'
в logger.js добавить
const logger = (req, res, next) => { console.log( `${req.method} ${req.protocol}://${req.get('host')}${req.originalUrl}` ); next(); }; module.exports = logger;
замените все в server.js на
const express = require('express'); const dotenv = require('dotenv'); const logger = require('./middleware/logger'); // Load env vars dotenv.config({ path: './config/config.env' }); // Route files const bootcamps = require('./routes/bootcamps'); const app = express(); app.use(logger); // Mount routers app.use('/api/v1/bootcamps', bootcamps); const PORT = process.env.PORT || 5000; app.listen(PORT,console.log(`server running in ${process.env.NODE_ENV} mode on PORT ${PORT}`));
это один из способов использования промежуточного программного обеспечения, но сейчас мы будем использовать стороннее промежуточное программное обеспечение с именем morgan, запустите эту команду на своей консоли.
npm i morgan
а теперь просто замените код в server.js приведенным ниже кодом.
const express = require('express'); const dotenv = require('dotenv'); const morgan = require('morgan'); // Load env vars dotenv.config({ path: './config/config.env' }); // Route files const bootcamps = require('./routes/bootcamps'); const app = express(); // dev logging middleware if(process.env.NODE_ENV == 'development'){ app.use(morgan('dev')); } // Mount routers app.use('/api/v1/bootcamps', bootcamps); const PORT = process.env.PORT || 5000; app.listen(PORT,console.log(`server running in ${process.env.NODE_ENV} mode on PORT ${PORT}`));
в консоли выдает аналогичный ответ
Так что да, это все для этого, спасибо, что придерживаетесь