node.js - Typen 'undefined' kan inte tilldelas typen 'string | string[]'


Jag försöker bara config .env-filen i min huvudfil.

men på något sätt fungerar det inte men felet är fel, det visar undefined men det är redan där

Första försöket

require('dotenv').config({ path: `${__dirname}/../.env` })

Andra försöket

import * as dotenv from 'dotenv'
dotenv.config()

Tredje försöket

import 'dotenv/config'

på något sätt laddas inte .env.

utför filen genom att

ts-node main.ts

.env-fil

SESSION_SECRET = uq07nyvn4xadskdg
COOKIE_SECRET = 0k5kb4qi8shhi7u0n

DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_USER = root
DB_PASS = root
DB_NAME = db_name

databasanslutning

export const db = createPool({
  host: process.env.DB_HOST,
  port: process.env.DB_PORT,
  user: process.env.DB_USER,
  password: process.env.DB_PASS,
  database: process.env.DB_NAME,
})

session

const sessionD = session({
  secret: process.env.SESSION_SECRET,
  resave: true,
  saveUninitialized: true,
  store: new MySQLStore({
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
  }),
})

Svar #1

dotenv säger ingenting till TypeScript. Allt det gör är att lägga in vad som än finns i din .env i process.env vid körning. Detta ändrar inga typer av något.

Så du hanterar process.env som verkar ha den här typen:

export interface ProcessEnv {
    [key: string]: string | undefined;
}

Vilket betyder att du inte kan tilldela det ett värde som inte kan vara undefined.

const myVar: string = process.env.WHATEVER
// Type 'string | undefined' is not assignable to type 'string'.
//   Type 'undefined' is not assignable to type 'string'.

Lösningen är att hantera fallet med undefined. Vad händer om någon glömmer .env-filen eller tar bort några av dess poster? Vad bör din kod göra i det fallet?

Kanske, ange ett standardvärde:

const whatever: string = process.env.WHATEVER ?? 'whatever default'

Eller kanske kasta ett fel:

let whatever: string
if (process.env.WHATEVER) {
  whatever = process.env.WHATEVER
} else {
  throw new Error("WHATEVER environment variable is not set")
}

TL;DR: Hantera fallet undefined.

Svar #2

De förväntade typerna är sträng eller strängarray, och du skickar miljövariabler som inte känns igen av TypeScript. Så du måste typomvandla din miljövariabel till en sträng på detta sätt för alla dina .env-variabler och felet kommer att tas bort.

secret: process.env.SESSION_SECRET as string;

Du kan läsa om typanpassning här.

Relaterade artiklar