Делал проект, ни одной проблемы и тут блять оно не принимает один единственный импорт, который не отличается от других блять ничем Ошибка при отладке показывает: config: Config = new Config() Uncaught ReferenceError ReferenceError: Config is not defined at <anonymous> (repl:1:9) import { Config } from "../../config" Uncaught SyntaxError SyntaxError: Cannot use import statement outside a module at (program) (repl:1:1) Файл в котором происходит импорт import { NextFunction, Request, Response } from "express" import { body } from "express-validator" import bcrypt from 'bcrypt' import jwt from 'jsonwebtoken' import { getUser } from "../../models/User" import { Config } from "../../config" export class Middleware{ static _instance: Middleware config: Config = new Config() public constructor(){ if(!Middleware._instance){ Middleware._instance = this } this.config = new Config() return Middleware._instance } public removeToken(req: Request, res: Response, next: NextFunction){ if(req.headers.authorization){ res.removeHeader('Authorization') next() } else{ next() } } public checkAuth(req: Request, res: Response, next: NextFunction){ console.log(this.config.key.secretKey) if(req.headers.authorization){ const decodeToken = jwt.verify(req.headers.authorization, this.config.key.secretKey) //getUser(decodeToken) return next() } else{ res.json({msg:"as"}) //return res.redirect('/login') } } public validateUsername(){ return body('username').notEmpty().isLength({min: 6, max: 18}).escape() } public validatePass(){ return body('password').notEmpty().isLength({min: 8, max: 32}).escape() } public async cryptPass(password: string){ return bcrypt.hashSync(password, this.config.key.salt) } public async generateAccessToken(username: string, role: string, id: number){ const payload = { username, role, id } return jwt.sign(payload, this.config.key.secretKey, {expiresIn: '30d'}) } public async validateUser(password: string, pass_hash: string){ return bcrypt.compareSync(password, pass_hash) } } JS import { NextFunction, Request, Response } from "express" import { body } from "express-validator" import bcrypt from 'bcrypt' import jwt from 'jsonwebtoken' import { getUser } from "../../models/User" import { Config } from "../../config" export class Middleware{ static _instance: Middleware config: Config = new Config() public constructor(){ if(!Middleware._instance){ Middleware._instance = this } this.config = new Config() return Middleware._instance } public removeToken(req: Request, res: Response, next: NextFunction){ if(req.headers.authorization){ res.removeHeader('Authorization') next() } else{ next() } } public checkAuth(req: Request, res: Response, next: NextFunction){ console.log(this.config.key.secretKey) if(req.headers.authorization){ const decodeToken = jwt.verify(req.headers.authorization, this.config.key.secretKey) //getUser(decodeToken) return next() } else{ res.json({msg:"as"}) //return res.redirect('/login') } } public validateUsername(){ return body('username').notEmpty().isLength({min: 6, max: 18}).escape() } public validatePass(){ return body('password').notEmpty().isLength({min: 8, max: 32}).escape() } public async cryptPass(password: string){ return bcrypt.hashSync(password, this.config.key.salt) } public async generateAccessToken(username: string, role: string, id: number){ const payload = { username, role, id } return jwt.sign(payload, this.config.key.secretKey, {expiresIn: '30d'}) } public async validateUser(password: string, pass_hash: string){ return bcrypt.compareSync(password, pass_hash) } } Файл из которого импортируем import fs from "fs" interface IConfig { telegram: { api_id: number, api_hash: string } db: { name: string, user: string, pass: string, host: string } key: { secretKey: string, salt: number } } export class Config implements IConfig { telegram = { api_id: 0, api_hash: "" } db = { name: '', user: '', pass: '', host: '' } key = { secretKey: '', salt: 0 } static _instance?: Config constructor() { if (!Config._instance) { Config._instance = this } const db = fs.readFileSync('./config/db.json', 'utf-8') const key = fs.readFileSync('./config/key.json', 'utf-8') this.db = JSON.parse(db) this.key = JSON.parse(key) this._load() return Config._instance } _load() { } } JS import fs from "fs" interface IConfig { telegram: { api_id: number, api_hash: string } db: { name: string, user: string, pass: string, host: string } key: { secretKey: string, salt: number } } export class Config implements IConfig { telegram = { api_id: 0, api_hash: "" } db = { name: '', user: '', pass: '', host: '' } key = { secretKey: '', salt: 0 } static _instance?: Config constructor() { if (!Config._instance) { Config._instance = this } const db = fs.readFileSync('./config/db.json', 'utf-8') const key = fs.readFileSync('./config/key.json', 'utf-8') this.db = JSON.parse(db) this.key = JSON.parse(key) this._load() return Config._instance } _load() { } } Очень надеюсь на помощь, нервов уже не хватает
RichPerson, кажется, проблема возникает из-за того, что вы пытаетесь использовать класс `Config` до его импорта. В файле `Middleware.ts` вы создаете экземпляр класса `Config` до того, как импортируете его из файла `config.ts`. Попробуйте изменить порядок импорта, чтобы сначала импортировать `Config`, а затем использовать его в `Middleware.ts`. Вот пример исправленного кода: import { NextFunction, Request, Response } from "express" import { body } from "express-validator" import bcrypt from 'bcrypt' import jwt from 'jsonwebtoken' import { getUser } from "../../models/User" import { Config } from "../../config" export class Middleware { static _instance: Middleware config: Config = new Config() public constructor() { if (!Middleware._instance) { Middleware._instance = this } this.config = new Config() return Middleware._instance } // остальной код... } TYPESCRIPT import { NextFunction, Request, Response } from "express" import { body } from "express-validator" import bcrypt from 'bcrypt' import jwt from 'jsonwebtoken' import { getUser } from "../../models/User" import { Config } from "../../config" export class Middleware { static _instance: Middleware config: Config = new Config() public constructor() { if (!Middleware._instance) { Middleware._instance = this } this.config = new Config() return Middleware._instance } // остальной код... } Попробуйте внести эту правку и проверьте, решает ли она проблему с импортом класса `Config`. Если проблема остается, дайте мне знать, чтобы мы могли исследовать ее дальше.
RichPerson, ошибка "Cannot use import statement outside a module" обычно возникает, когда вы пытаетесь использовать оператор `import` в файле, который не является модулем. Это может произойти, если ваш файл не имеет расширения `.js` или `.mjs`, или если вы не указали атрибут `type="module"` в теге `<script>` при использовании в браузере. В вашем случае, вы используете `import` в файле `Middleware.ts`. Убедитесь, что ваш проект настроен для использования модулей. В Node.js вы можете указать, что файл является модулем, добавив расширение `.mjs` к имени файла (например, `Middleware.mjs`). Затем вы можете использовать `import` в этом файле. Если вы используете браузер, убедитесь, что в вашем теге `<script>` есть атрибут `type="module"`: <script type="module" src="main.js"></script> HTML <script type="module" src="main.js"></script> Если вы все еще получаете ошибку, убедитесь, что пути к файлам указаны правильно. Проверьте, что файл `Config.ts` действительно находится по пути `../../config` относительно файла `Middleware.ts`. Если ни одно из этих решений не помогло, пожалуйста, предоставьте больше информации о вашем проекте и его структуре, чтобы я мог предложить более точное решение.
ChatGPT, Uncaught Error Error: Cannot find module '../../config'Require stack:- <inspector console> at Module._resolveFilename (internal/modules/cjs/loader:1077:15) at Module._load (internal/modules/cjs/loader:922:27) at Module.require (internal/modules/cjs/loader:1143:19) at require (internal/modules/cjs/helpers:121:18) at <anonymous> (repl:1:18) Такая ошибка в скомпилированном js файле Путь указан правильно
RichPerson, ошибка "Cannot find module '../../config'" указывает на то, что Node.js не может найти модуль `../../config`. Возможные причины этой ошибки: 1. Убедитесь, что файл `Config.ts` или `Config.js` действительно существует по указанному пути `../../config`. Проверьте правильность написания имени файла и его расширения. 2. Проверьте, что путь `../../config` указан правильно относительно файла `Middleware.ts`. Убедитесь, что вы правильно указали количество `../` для перехода на уровень выше и попадания в папку `config`. 3. Если вы используете TypeScript, убедитесь, что файл `Config.ts` правильно скомпилирован в JavaScript. Проверьте настройки компиляции TypeScript, чтобы убедиться, что файл `Config.ts` включен в процесс компиляции и правильно скомпилирован в JavaScript. 4. Если вы используете модули CommonJS (`require` и `module.exports`), убедитесь, что вы правильно используете `require` для импорта модуля `Config`. Например, вместо `import { Config } from "../../config"` используйте `const { Config } = require("../../config")`. Если ни одно из этих решений не помогло, пожалуйста, предоставьте больше информации о структуре вашего проекта и коде, чтобы я мог предложить более точное решение.
RichPerson, Если у тебя прописан type: module в файле package.json, то при импорте модули должны иметь расширение, например: import { Config } from "../../config.js"; JS import { Config } from "../../config.js"; Независимо от того, используешь ли ты TypeScript или нет.
equilpres, спасибо бро, уже решил проблему, убрал некоторые детали просто с вызовом класса и все. Даже костыли не пришлось всовывать. Но тема полезная, пробежался глазами