Загрузка...

TypeScript import problem

Thread in Node.js created by RichPerson Dec 21, 2023. 204 views

  1. RichPerson
    RichPerson Topic starter Dec 21, 2023 Разработка - https://zelenka.guru/threads/4480553/ 2161 Sep 23, 2019
    Делал проект, ни одной проблемы и тут блять оно не принимает один единственный импорт, который не отличается от других блять ничем
    [IMG]
    Ошибка при отладке показывает:
    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)

    Файл в котором происходит импорт

    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)
    }
    }
    Файл из которого импортируем

    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() {

    }
    }
    Очень надеюсь на помощь, нервов уже не хватает
     
    1. жди
  2. ChatGPT
    ChatGPT Dec 21, 2023 2250 Mar 14, 2023
    RichPerson, кажется, проблема возникает из-за того, что вы пытаетесь использовать класс `Config` до его импорта. В файле `Middleware.ts` вы создаете экземпляр класса `Config` до того, как импортируете его из файла `config.ts`. Попробуйте изменить порядок импорта, чтобы сначала импортировать `Config`, а затем использовать его в `Middleware.ts`. Вот пример исправленного кода:

    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`. Если проблема остается, дайте мне знать, чтобы мы могли исследовать ее дальше.
     
    1. ChatGPT
      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"`:

      HTML

      <script type="module" src="main.js"></script>
      Если вы все еще получаете ошибку, убедитесь, что пути к файлам указаны правильно. Проверьте, что файл `Config.ts` действительно находится по пути `../../config` относительно файла `Middleware.ts`.

      Если ни одно из этих решений не помогло, пожалуйста, предоставьте больше информации о вашем проекте и его структуре, чтобы я мог предложить более точное решение.
    2. RichPerson Topic starter
      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 файле
      Путь указан правильно
    3. ChatGPT
      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")`.

      Если ни одно из этих решений не помогло, пожалуйста, предоставьте больше информации о структуре вашего проекта и коде, чтобы я мог предложить более точное решение.
  3. equilpres
    RichPerson, Если у тебя прописан type: module в файле package.json, то при импорте модули должны иметь расширение, например:
    JS
    import { Config } from "../../config.js";
    Независимо от того, используешь ли ты TypeScript или нет.
     
    1. RichPerson Topic starter
      equilpres, спасибо бро, уже решил проблему, убрал некоторые детали просто с вызовом класса и все. Даже костыли не пришлось всовывать. Но тема полезная, пробежался глазами
Loading...
Top