рдореВрд▓ Node.JS рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЖрд╡реЗрджрди

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред
рдореИрдВ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдХ рдореВрд▓ рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЙрд╕реА рддрд░рд╣ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░реВрдВ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред рдзреНрдпрд╛рди рд╕реЗред рдкрд╛рда рдФрд░ рдХреЛрдб рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИред рд╢рд╛рдпрдж рдореИрдВ рдХреБрдЫ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦреВрдВрдЧрд╛, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореИрдВ рдХреБрдЫ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рдореИрдВ рд▓реЗрдЦ рдкрд░ рд╕реБрдзрд╛рд░ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде-рд╕рд╛рде рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рднреА рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдерд╛: рдПрдХ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╣реА рдЙрддреНрддрд░ рджреЗ рд╕рдХрддрд╛ рд╣реИред

So. рдЖрдЗрдП рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:

express -  ,   http- mongoose - ,     MongoDB mongodb - native-driver    MongoDB  connect-mongo -    express  session node-uuid -      (   -) async -      ,  Promise ejs-locals -  ,     nconf -       ( config.json) string -      ,      ,  html    validator -   winston -     


рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
npm рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ << рдореЙрдбреНрдпреВрд▓_name >> -save

- рдЕрдиреНрдп рдорд╢реАрдиреЛрдВ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрдЧреЗ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ (рдкреИрдХреЗрдЬ.рдЬрд╕рди) рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрд╡реЗрджрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  /config config.json index.js /middleware checkAuth.js errorHandler.js index.js /models user.js /public /*JS, CSS, HTML static files*/ /routes authentication.js error.js index.js main.js register.js /utils index.js log.js mongoose.js validate.js /views index.ejs manage.js package.json server.js 


рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдЙрд╕рдХреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдирдордХ рдХреНрдпрд╛ рд╣реИред
рдЖрдЗрдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред

server.js


 var express = require('express'), http = require('http'), app = express(), middleware = require('./middleware')(app, express), config = require('./config'), log = require('./utils/log')(app, module); http.createServer(app).listen(config.get('port'), function(){ log.info('Express server listening on port ' + config.get('port')); }); 


Server.js рдореЗрдВ рд╣рдо рдПрдкреЗрдХреНрд╕реНрд░реЗрд╕ рдРрдк рдмрдирд╛рддреЗ рд╣реИрдВ, рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рд╕рд░реНрд╡рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред

package.json


 { "name": "test_express_app", "version": "0.0.1", "private": true, "scripts": { "start": "node server.js" }, "dependencies": { "express": "~3.4.6", "mongoose": "~3.8.1", "node-uuid": "~1.4.1", "nconf": "~0.6.9", "winston": "~0.7.2", "async": "~0.2.9", "mongodb": "~1.3.22", "ejs-locals": "~1.0.2", "connect-mongo": "~0.4.0", "validator": "~2.0.0", "string": "~1.7.0" } } 


рдЗрд╕рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА, рд╕рд╛рде рд╣реА рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

manage.js


 var mongoose = require('./utils/mongoose'), async = require('async'), User = require('./models/user'), log = require('./utils/log')(null, module), config = require('./config'); function openConnection(cb) { mongoose.connection.on('open', function () { log.info('connected to database ' + config.get('db:name')); cb(); }); } function dropDatabase(cb) { var db = mongoose.connection.db; db.dropDatabase(function () { log.info('dropped database ' + config.get('db:name')); cb(); }); } function createBaseUser(cb) { var admin = new User({ username: 'admin', password: config.get('project:admin:password'), email: config.get('project:admin:email'), role: 1 }); admin.save(function () { log.info('created database ' + config.get('db:name')); log.info('created base admin user'); cb(); }); } function ensureIndexes(cb) { async.each(Object.keys(mongoose.models), function (model, callback) { mongoose.models[model].ensureIndexes(callback); }, function () { log.info('indexes ensured completely'); cb(); }); } function closeConnection() { mongoose.disconnect(); log.info('disconnected'); } async.series( [ openConnection, dropDatabase, createBaseUser, ensureIndexes ], closeConnection ); 


рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рднрд░рдирд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрдЧрд╛ред

config


config.json


 { "port": 3000, "db": { "connection": "mongodb://localhost", "name": "db_name", "options": { "server": { "socketOptions": { "keepAlive": 1 } } } }, "session": { "secret": "secret_key", "key": "cid", "cookie": { "path": "/", "httpOnly": true, "maxAge": null } } } 


index.js


 var nconf = require('nconf'); var path = require('path'); nconf.argv() .env() .file({file: path.join(__dirname, 'config.json')}); module.exports = nconf; 


Config.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рд╕рд╛рде рд╣реА рд╕рддреНрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, nconf рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рдЖрдкрдХреЛ рдЧреЗрдЯ рдФрд░ рд╕реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдкреНрд░рддреАрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ::

 config.get('session:secret'); config.get('session:cookie:path'); 


рдорд┐рдбрд▓рд╡реЗрдпрд░


 module.exports = function (app, express) { var ejs = require('ejs-locals'), path = require('path'), config = require('../config'), mongoose = require('../utils/mongoose'), MongoStore = require('connect-mongo')(express), router = require('../routes'), errorHandler = require('./errorHandler')(app, express), checkAuth = require('./checkAuth'); /** * Page Rendering * */ app.engine('html', ejs); app.engine('ejs', ejs); app.set('views', path.join(__dirname, '../views')); app.set('view engine', 'ejs'); /** * Favicon * */ app.use(express.favicon('public/images/favicon.ico')); /** * Logger * */ if (app.get('env') == 'development') { app.use(express.logger('dev')); } /** * Session * */ app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret: config.get('session:secret'), key: config.get('session:key'), cookie: config.get('session:cookie'), store: new MongoStore({mongoose_connection: mongoose.connection}) })); /** * Authorization Access * */ app.use(checkAuth); /** * Routing * */ app.use(app.router); router(app); /** * Public directory * */ app.use(express.static(path.join(__dirname, '../public'))); app.use("/public", express.static(path.join(__dirname, '../public'))); /** * Error handing * */ app.use(errorHandler); }; 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рдмрдВрдж рдХрд┐рдП рдмрд┐рдирд╛ рд╕рднреА рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдкрд░ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдпрд╣ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдПрд░рд░рд╣реИрдВрдбрд▓рд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рд╕рд░реНрд╡рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ, рдФрд░ рдПрд░рд░ рдкреЗрдЬ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

errorHandler


 var config = require('../config'); var sendHttpError = function (error, res) { res.status(error.status); if (res.req.xhr) { res.json(error); } else { res.render('error', { error: { status: error.status, message: error.message, stack: config.get('debug') ? error.stack : '' }, project: config.get('project') }); } }; module.exports = function (app, express) { var log = require('../utils/log')(app, module), HttpError = require('../error').HttpError; return function(err, req, res, next) { if (typeof err === 'number') { err = new HttpError(err); } if (err instanceof HttpError) { sendHttpError(err, res); } else { if (app.get('env') === 'development') { express.errorHandler()(err, req, res, next); } else { log.error(err); err = new HttpError(500); sendHttpError(err, res); } } }; }; 


рдореИрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЪреЗрдХрдСрде рдХреЛ рднреА рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
 var HttpError = require('../error').HttpError; module.exports = function (req, res, next) { if (!req.session.user) { return next(new HttpError(401, "You are not authorized!")); } next(); }; 

рдЬреЛ рд╕рддреНрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдФрд░, рдпрджрд┐ рдпрд╣ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрд╢реНрд╡рд┐рдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 app.get('/user-info', checkAuth, function (req, res, next) { //do your staff }); 


рдореЙрдбрд▓


Mongoose рдХреА рдорджрдж рд╕реЗ рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдореЙрдбрд▓ рдмрдирд╛рдПрдВрдЧреЗред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЙрдбрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 var crypto = require('crypto'), mongoose = require('../utils/mongoose'), Schema = mongoose.Schema, async = require('async'); var User = new Schema({ username: { type: String, unique: true, required: true }, hashedPassword: { type: String, required: true }, salt: { type: String, required: true } }); User.methods.encryptPassword = function (password) { return crypto.createHmac('sha1', this.salt).update(password).digest('hex'); }; User.virtual('password') .set(function (password) { this._plainPassword = password; this.salt = Math.random() + ''; this.hashedPassword = this.encryptPassword(password); }) .get(function () { return this._plainPassword; }); User.methods.checkPassword = function (password) { return this.encryptPassword(password) === this.hashedPassword; }; module.exports = mongoose.model('User', User); 


рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ


рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА рдЬреЛ рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рд╣реИрдВред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 /** * Public directory * */ app.use(express.static(path.join(__dirname, '../public'))); app.use("/public", express.static(path.join(__dirname, '../public'))); 


рдорд╛рд░реНрдЧреЛрдВ


рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рд╣рдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред index.js рдлрд╝рд╛рдЗрд▓

 var main = require('./main'), register = require('./register'), authentication = require('./authentication'), error = require('./error'); module.exports = function (app) { app.get('/', main.home); app.post('/register', register.requestRegistration); app.get('/users', authentication.users); app.get('/users/:id', authentication.user); app.get('*', error['404']); }; 


рдпрд╣рд╛рдБ рд╣рдо рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдЧреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╕ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рд╕реМрдВрдкрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рд░реНрдЧ "/" :
 /** * Method: GET * URI: / * */ exports.home = function(req, res, next) { res.render('index'); }; 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдРрд╕реЗ рдореЗрдВ рдЖрдзрд╛рд░ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╕рддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рдореЙрдбрд▓ / user.js рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдкреБрдирд╢реНрдЪ:
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ, рд╕реВрдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдИред рдХрд╛рдВрдЯреЛрд░ рдХреЗ рд╕реНрдХреНрд░реЗрдВрдХреЛрд╕реНрдЯ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреЗрдВрдЪрдХрд╕ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред
MongoDB рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд┐рдпрд╛

Source: https://habr.com/ru/post/In207930/


All Articles