Búsqueda de sitios web

node.js - ¿Cómo resolver "No se pudo encontrar un archivo de declaración para el módulo 'request-context'."?


Estoy trabajando en tres archivos en este momento que son index.js, index.main.js y app.js. Estoy usando request-context para tomar una variable de index.main.js y pasarla a index.js.

En app.js (un archivo que creé en mi carpeta del servidor) tengo el siguiente código

    //full code in app.js

    const contextService = require("request-context");
    const app = express();

    app.use(contextService.middleware("request"));

He intentado ejecutar los siguientes comandos

npm install --save typescript @types/node @types/react @types/react-dom @types/jest

npm install -D @types/request-context

y también intentó usar antes de importar

// @ts-ignore

En vano.

Cuando reviso mi app.js noto tres puntos en la palabra "require" que muestran:

No se pudo encontrar un archivo de declaración para el módulo 'request-context'. '/home/servertest/Desktop/folder/folder1/src/component_NodeJS/server/node_modules/request-context/lib/index.js' tiene implícitamente un tipo 'any'. Intenta npm install @types/request-context si existe o agrega un nuevo archivo de declaración (.d.ts) que contenga declare module 'request-context';ts(7016)

En index.main.js tengo lo siguiente

 async function listFilesInDepth()

    {
      const {Storage} = require('@google-cloud/storage');

      const storage = new Storage();

      const bucketName = 'probizmy';

      const [files] = await storage.bucket(bucketName).getFiles();

      const contextService = require("request-context");

      console.log('List Of Files Available:'); 

        files.forEach(file =>

          {

            targetFiles = file.name;

            console.log(`-----`+file.name);
          });

          contextService.set("request:targetFileKey", targetFiles);

          return targetFiles;
    }

y en index.js tengo el siguiente código

const contextService = require("request-context");
const targetFiles = contextService.get("request:targetFileKey");

console.log(targetFiles) //output shows undefined

Sospecho que el error de contexto de la solicitud es la razón por la que estoy obteniendo 'undefined' como resultado. Mi resultado esperado es que el valor de targetFiles se muestre en el registro de la consola.

Esperando obtener alguna idea sobre esto. ¡Cualquier ayuda sería muy apreciada! ¡Gracias :)

Editado :

Como se solicitó, he incluido package.json

{
  "name": "server",
  "version": "0.1.81",
  "description": "Server NodeJS For Internel Process",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "dependencies": {
    "@google-cloud/storage": "^2.4.2",
    "@google-cloud/vision": "^0.25.0",
    "@types/jest": "^24.0.15",
    "@types/node": "^12.0.12",
    "@types/react": "^16.8.23",
    "@types/react-dom": "^16.8.4",
    "alphabet-generator": "^1.0.1",
    "body-parser": "^1.18.3",
    "cheerio": "^1.0.0-rc.2",
    "cors": "^2.8.5",
    "express": "^4.16.4",
    "format": "^0.2.2",
    "grpc": "^1.19.0",
    "multer": "^1.4.1",
    "natural": "^0.6.3",
    "path": "^0.12.7",
    "request": "^2.88.0",
    "request-context": "^2.0.0",
    "require-all": "^3.0.0",
    "require-dir": "^1.2.0",
    "string-similarity": "^3.0.0",
    "typescript": "^3.5.2"
  },
  "devDependencies": {
    "babel-plugin-root-import": "^6.2.0"
  }
}

Respuesta #1

He tenido este problema antes y hay un problema con la forma en que estás declarando tus tipos. Hay varias formas de resolver esto que incluiré a continuación con más enlaces para obtener información, con un enlace a la documentación de declaraciones de TypeScript y varios otros recursos de StackOverflow. Si incluyes tu package.json, podría ayudar a determinar qué es lo que específicamente todavía necesitas hacer. Probablemente necesites agregar una carpeta/archivo de tipos con las siguientes líneas de código

"typeRoots": [
  "./node_modules/@types",
  "./types"
]                       /* List of folders to include type definitions from. */

Y luego crea un segundo archivo con la forma *.d.ts para listar los módulos que necesitas y que están dando errores. Así que algo como

declare module 'request-context';

El problema también podría estar en tu archivo package.js. Es posible que necesites declarar dónde están tus tipados de esta manera

// package.json
{
  "typings": "dist/src/*.d.ts"
}

Diferentes recursos

https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html

No se pudo encontrar un archivo de declaración para el módulo 'module-name'. '/path/to/module-name.js' tiene implícitamente un tipo 'any'

Typescript react - No se pudo encontrar un archivo de declaración para el módulo 'react-materialize'. 'path/to/module-name.js' tiene implícitamente un tipo any

No se pudo encontrar un archivo de declaración para el módulo

TypeScript: No se pudo encontrar un archivo de declaración para el módulo en las pruebas unitarias, solo

Respuesta #2

Tal vez sea porque listFilesInDepth es asíncrono y tienes que manejar la promesa o usar async await en ese método.

¿Se llama al método listFilesInDepth antes de hacer el context.get?

Artículos relacionados