ការកំណត់ផ្លូវ


យើងគួររំលឹកឡើងវិញ​ថា ការកំណត់ផ្លូវ (routing) គឺ​ជាការកំណត់​ផ្លូវ​ចូល​ទៅ​កាន់​ឯកសារណាមួយ នៅពេលដែលអ្នក​ចូល​មើលគេហទំព័រ​ចុច​អាស័យដ្ឋាន​ណាមួយ។ ដោយឡែក នៅ​ក្នុង​កម្មវិធី keystone មុននឹង​ធ្វើ​ការកំណត់ផ្លូវណា​មួយ យើង​ចាំបាច់​ត្រូវ​​បន្ថែម​ទិន្នន័យ​ចំនួន​ពីរ​ទៀត ចូល​ទៅ​ក្នុង​ក្បួន​ឈ្មោះ keystone.init() នៅ​ក្នុង​ឯកសារ​នៃកម្មវិធី​មេ keystone.js ដោយ​ធ្វើដូច​ខាង​ក្រោម​នេះ៖
var keystone = require('keystone');

keystone.init({
  'cookie secret': 'secure string goes here',
  'name': 'mykeystone',
  'user model': 'User',
  'auto update': true,
  'auth': true,
  views: 'templates/views',
  'view engine': 'ejs',
});

keystone.import('models');

keystone.start();
នៅ​លើ​បន្ទាត់េលេខ 9 ការសរសេរ​ថា views: 'templates/views' គឺ​ជាការកំណត់​ថត templates/views ជា​ថត​​សំរាប់​ដាក់​ឯកសារ​ដែល​ត្រូវ​យកមក​បកប្រែ ដើម្បី​បង្ហាញ​លទ្ធផល​ផ្សេង​ៗ ​នៅលើ browser ។

នៅ​លើបន្ទាត់លេខ 10 ការសរសេរថា 'view engine': 'ejs' គឺ​ជាការ​កំណត់​យក​ភាសា ejs ជាភាសាគំរូ​គេហទំព័រ (template language) សំរាប់​បក​ប្រែ​បណ្តាឯកសារ​ទាំងឡាយ​ ដែល​មាននៅ​ក្នុង​ថត views ។

បន្ទាប់​មក​ទៀត យើង​ចាំបាច់​ត្រូវ​ទាញយក​និង​តំលើងសាស្ត្រា ejs នៅ​ក្នុង​កម្មវិធី keystone របស់​យើង ដោយ​សរសេរ​នៅ​លើ​បង្អួច​ខ្មៅ​ថា npm install --save ejs ។

រួច​ពី​នោះមក យើង​ចាំបាច់​ត្រូវ​កំណត់ផ្លូវ​ទៅកាន់​ថត​ដែល​នៅ​ក្នុង​នោះ យើង​នឹង​រក្សាទុក​នូវ​បណ្តា​ឯកសារ​នៃ​ការបង្ហាញ​ផ្លូវ​ទាំងឡាយ​ នៅ​ក្នុង​កម្មវិធី keystone របស់​យើង​។ ហើយ​ជាទូទៅ​ថត​នោះ​ត្រូវ​គេ​អោយ​ឈ្មោះ​ថា​ជា​ routes ។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖
var keystone = require('keystone');

keystone.init({
  'cookie secret': 'secure string goes here',
  'name': 'mykeystone',
  'user model': 'User',
  'auto update': true,
  'auth': true,
  views: 'templates/views',
  'view engine': 'ejs',
});

keystone.import('models');
keystone.set('routes', require('./routes'));

keystone.start();
នៅ​លើបន្ទាត់​លេខ 14 ការសរសេរ​ថា keystone.set('routes', require('./routes')); គឺ​ជាការកំណត់​យក​ថត​ឈ្មោះ routes ជា​ថត​សំរាប់​រក្សា​ទុក​នូវ​​បណ្តា​ឯកសារ​ទាំងឡាយ​ណា​ ទាក់ទង​នឹង​ការ​កំណត់​ផ្លូវ​ចូល​ទៅ​កាន់​ឯកសារ​ផ្សេង​ៗ​។

ដើម្បីឆ្លើយតប​ទៅ​នឹង​ការកំណត់​ខាង​លើ​នេះ យើងចាំបាច់​ត្រូវ​បង្កើត​ថត​ឈ្មោះ routes ដែលនៅ​ក្នុង​​នោះ​មាន​ឯកសារ​ index.js មួយនិង​ថត​រង​ឈ្មោះ​ views មួយ​ទៀត ដែលនៅ​ក្នុង​នោះ​ក៏​មាន​ឯកសារ​ឈ្មោះ index.js មួយ​ដែរ។
|--keystone
  |--node_modules/
  |--routes
    |--index.js
    |--views
      |--index.js
  |--models
     |--User.js
  |--updates
     |--0.0.1-first-user.js 
  |--package.json
  |--keystone.js
បន្ទាប់មកទៀត នៅ​ក្នុង​ឯកសារ index.js ក្នុង​ថត routes យើង​សរសេរ​កូដ​មួយ​ចំនួន​ដូច​ខាង​ក្រោម​នេះ៖
function routeFunction(req, res) {
  res.render('index');
}

module.exports = function (app) {
  app.get('/', routeFunction);
};

var keystone = require('keystone');
var importRoutes = keystone.importer(__dirname);

var routes = {
  views: importRoutes('./views'),
};

exports = module.exports = function (app) {
  app.get('/', routes.views.index)
};
ចំណែកឯ​នៅ​ក្នុង​ឯកសារ index.js នៅ​ក្នុង​ថត views វិញ យើង​ត្រូវ​សរសេរ​កូដ​ដូច​ខាង​ក្រោម​នេះ៖
module.exports = function (req, res) {
  res.send('កម្មវិធី Keystone');
};
បន្ទាប់​មានអ្វី​ៗ​រួច​រាល់អស់​ហើយ បើ​យើង​ដំណើរការ​កម្មវិធី keystone របស់​យើង យើងនឹង​បានលទ្ធផលដូច​ខាងក្រោម​នេះ៖



យ៉ាងណាម៉ិញ បើ​សិន​ជា​យើង​ចង់ប្រើប្រាស់​ភាសាគំរូ​គេហទំព័រ EJS សំរាប់ស្រង់​យក​ទិន្នន័យ​នៅ​ក្នុង​កម្មវិធី keystone មកសរសេរ​បង្ហាញ​នៅ​លើ browser នោះ យើង​ចាំបាច់​ត្រូវ​បង្កើត​ថត templates/views ដើម្បី​ដាក់​ឯកសារ ែញៃ ​ផ្សេងៗ​​ជាមុន​សិន​​។
|--keystone
  |--node_modules/
  |--routes
    |--index.js
    |--views
      |--index.js
  |--templates
    |--views
      |--index.ejs
  |--models
     |--User.js
  |--updates
     |--0.0.1-first-user.js 
  |--package.json
  |--keystone.js
លុះ​មានថត​ templates និថត views ទាំងពីរ​នេះ​ហើយ យើង​អាច​សាកល្បង​បង្កើត​ឯកសារ index.ejs មួយ​ទុកនៅ​ក្នុង​ថត views ។ ហើយ​នៅ​ក្នុង​ឯកសារ index.ejs នេះ​ យើង​អាច​សរសេរ​កូដ​មួយ​ចំនួន​ដូច​ខាង​ក្រោម​នេះ៖

<!doctype html>
<html lang="en">
  <head>
    គេហទំព័រ​យើង
  </head>
  <body>
    កម្មវិធី Keystone ដោយ​ប្រើប្រាស់ភាសា​គំរូ​គេហទំព័រ EJS
  </body>
</html>
ដើម្បី​យក​ឯកសារ index.ejs នេះ​ទៅ​បក​ប្រែ​និង​បង្ហាញ​លទ្ធផល​នៅ​លើ browser យើង​ចាំបាច់​ត្រូវ​សរសេរ​កូដ​សារដើម​ឡើង​វិញ​ជា​ថ្មី​ទៀត នៅ​ក្នុង​ឯកសារ index.js នៅ​ក្នុង​ថត​រង views នៃ​​ថត​មេ routes ។
module.exports = function (req, res) {
  res.render('index');
};


នៅ​លើ​បន្ទាត់​លេខ 2 ការសរសេរ​ថា res.render('index'); គឺ​ជាការ​យក​ឯកសារ index.ejs នៅ​ក្នុង​ថត templates/views មក​បកប្រែ​និង​បង្ហាញ​លទ្ធផល​នៅ​លើ​ browser ៕