Привязка пользовательских глобальных переменных в Node.js

Я использовал пакет экспресс-валидатора для проверки и пакет i18n для глобализации в своем проекте Node.js. Как вы видите, я использую и настраиваю эти два пакета таким образом. Обратите внимание, что i18n связан с глобальной переменной:

// app-config.js

const path = require('path');
const logger = require('morgan');
const bodyParser = require('body-parser');
const i18n = require('i18n');
const globalConfig = require('../../infrastructure/config/global-config');
const expressValidator = require('express-validator');


module.exports = (app,express)=>{
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));    

    // view engine setup ##I need to manage and handle all works on views later!
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'pug');


    app.use(i18n.init);
    i18n.configure({
        locales:['en','fa'],
        directory:`${globalConfig.rootPath}/locales`,
        register:global,
        objectNotation:true,
        defaultLocale:'fa'
    });

    console.log(__('messages.validationMessages.itemIsRequired', { item: t('fields.address') } ));

    app.use(expressValidator());


};

Каждый из этих двух пакетов работает хорошо отдельно. На самом деле, эта строка в приведенном выше коде эти строки кода работает как шарм:

console.log(__('messages.validationMessages.itemIsRequired', { item: t('fields.address') } ));

Но проблема в использовании переменной __ в другом файле. Например, когда я хочу использовать эту переменную с withMessage(...) функция экспресс-валидатора следующим образом:

const { check, oneOf, validationResult } = require('express-validator/check');
const { matchedData, sanitize } = require('express-validator/filter');
const i18n = require('i18n');

module.exports = class AddStaffViewModel {

  constructor() {

    this.staffFullName = '';
    this.staffMobileNumber = '';
    this.staffUserName= '';
    this.staffPassword = '';
    this.address = '';

  }

  validate(req) {

      return [

        sanitize('staffFullName').trim(),
        sanitize('staffMobileNumber').trim(),
        sanitize('staffUserName').trim(),
        sanitize('staffPassword').trim(),
        sanitize('address').trim(),

          check('staffFullName')
          .exists().withMessage( __('messages.validationMessages.itemIsRequired', { item: __('fields.fullName') } ) )
          .isLength( { min:2, max: 50 } ).withMessage( __('messages.validationMessages.itemValueLengthIsNotValid', { item: __('fields.fullName') } ) ),


          check('staffMobileNumber')
          .exists().withMessage( __('messages.validationMessages.itemIsRequired', { item: __('fields.mobileNumber') } ) )
          .isLength( { min:2, max: 50 } ).withMessage( __('messages.validationMessages.itemValueLengthIsNotValid', { item: __('fields.mobileNumber') } ) ),


          check('staffUserName')
          .exists().withMessage( __('messages.validationMessages.itemIsRequired', { item: __('fields.userName') } ) )
          .isLength( { min:2, max: 50 } ).withMessage( __('messages.validationMessages.itemValueLengthIsNotValid', { item: __('fields.userName') } ) ),


          check('staffPassword')
          .exists().withMessage( __('messages.validationMessages.itemIsRequired', { item: __('fields.password') } ) )
          .isLength( { min:2, max: 50 } ).withMessage( __('messages.validationMessages.itemValueLengthIsNotValid', { item: __('fields.password') } ) ),

          check('address')
          .exists().withMessage( __('messages.validationMessages.itemIsRequired', { item: __('fields.address') } ) )
          .isLength( { min:2, max: 1024 } ).withMessage( __('messages.validationMessages.itemIsRequired', { item: __('fields.address') }) )


      ];        

  }

}

Объект req передается для проверки функции вышеуказанного класса следующим образом:

async create(req, res, next) {

    try {
      var addStaffViewModel = new AddStaffViewModel();
      addStaffViewModel.validate(req);

      const validationResult = await req.getValidationResult();

      if(!validationResult.isEmpty()) {
        _reponseHandler.setFailureStatus(validationResult.array(), __('messages.validationMessages.message'));
        res.status(200).send(_reponseHandler);
        return;
      }

      res.status(200).send();
      return;

    } catch(err) {
      console.error(err);
      return next(err);
    }

  }

Выдается ошибка, когда я перезапускаю процесс Node.js и говорит, что:

**

ReferenceError: __ не определено в AddStaffViewModel.validate

**

Я обнаружил, что когда я хочу использовать глобальную __- переменную i18n в AddStaffViewModel с withMessage(...), Node.js все еще не знает глобальную __-переменную (__ является частью пакета i18n), а также когда эта ошибка произошло, то команда console.log(...) в app-config.js не запускается.

На самом деле я в замешательстве. Любая помощь, чтобы решить эту проблему.

Признательность

0 ответов

Другие вопросы по тегам