Ошибка: Ошибка проверки конфигурации: ошибка дочернего элемента "JWT_SECRET", так как ["JWT_SECRET" требуется] - PullRequest
0 голосов
/ 08 мая 2019

Сейчас я работаю над проектом, построенным на NODE. Я разрабатываю API для проекта. Когда я запускаю сервер, API работает нормально. Итак, на следующем шаге я пишу тестовый пример для моего API. Это дает мне неожиданный результат. Мой код падает в моем файле config.js. После некоторой отладки я обнаружил, что он не может принимать входные данные от process.ENV. Однако я не понимаю, почему это не может. Я определяю файл .env в моей корневой папке. Я делюсь своими файлами folder structure, config.js, test.js и .env здесь. Пожалуйста, проверьте это и дайте мне знать, что я пропустил здесь.

Структура папок

project
│   README.md
│   config
|   |___config.js
│
└───server
│   │   
│   │___helpers
│   │
│   └───registration
│       │______ user
|                 |_____ user.route.js 
│                 |_____ user.model.js
|                 |_____ user.controller.js
│                 |_____ user.test.js
│   
|───.env
|___ package.json
|___ index.js
|___ index.route.js

config.js

const Joi = require('joi');

// require and configure dotenv, will load vars in .env in PROCESS.ENV
require('dotenv').config();

console.log(process.env.PORT);
// define validation for all the env vars
const envVarsSchema = Joi.object({
  NODE_ENV: Joi.string()
    .allow(['development', 'production', 'test', 'provision'])
    .default('development'),
  PORT: Joi.number()
    .default(4040),
  MONGOOSE_DEBUG: Joi.boolean()
    .when('NODE_ENV', {
      is: Joi.string().equal('development'),
      then: Joi.boolean().default(true),
      otherwise: Joi.boolean().default(false)
    }),
  JWT_SECRET: Joi.string().required()
    .description('JWT Secret required to sign'),
  MONGO_HOST: Joi.string().required()
    .description('Mongo DB host url'),
  MONGO_PORT: Joi.number()
    .default(27017)
}).unknown()
  .required();

const { error, value: envVars } = Joi.validate(process.env, envVarsSchema);
if (error) {
  throw new Error(`Config validation error: ${error.message}`);
}

const config = {
  env: envVars.NODE_ENV,
  port: envVars.PORT,
  mongooseDebug: envVars.MONGOOSE_DEBUG,
  jwtSecret: envVars.JWT_SECRET,
  mongo: {
    host: envVars.MONGO_HOST,
    port: envVars.MONGO_PORT
  }
};

module.exports = config;

user.test.js

const mongoose = require('mongoose');
const request = require('supertest-as-promised');
const httpStatus = require('http-status');
const chai = require('chai'); // eslint-disable-line import/newline-after-import
const expect = chai.expect;
const app = require('../../../index');

chai.config.includeStack = true;

/**
 * root level hooks
 */
after((done) => {
  mongoose.models = {};
  mongoose.modelSchemas = {};
  mongoose.connection.close();
  done();
});

describe('## User APIs', () => {
  let user = {
    name: 'KK123',
    gender: 'male',
    skillArea: 'nodeJs',
    email: 'a@a.com',
    mobileNumber: '1234567890',
    password: '123456'
  };

  describe('# POST /api/v1/register/user', () => {
    it('should create a new user', (done) => {
      request(app)
        .post('/api/v1/register/user')
        .send(user)
        .expect(httpStatus.OK)
        .then((res) => {
          expect(res.body.name).to.equal(user.name);
          expect(res.body.gender).to.equal(user.gender);
          expect(res.body.skillArea).to.equal(user.skillArea);
          expect(res.body.email).to.equal(user.email);
          expect(res.body.mobileNumber).to.equal(user.mobileNumber);
          expect(res.body.password).to.equal(user.password);
          user = res.body;
          done();
        })
        .catch(done);
    });
  });
});

.env

NODE_ENV=development
PORT= 4040
JWT_SECRET = "Testpurposeonly"
MONGO_HOST = mongodb://localhost/user
MONGO_PORT = 27017

1 Ответ

0 голосов
/ 12 мая 2019

Я решил проблему, экспортировав JWT_SECRET.Я использовал команду

export JWT_SECRET = mysecretkey

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...