es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con hapi-router en TypeScript.

Estoy utilizando el módulo de npm hapi-router. No puedo usar hapi-router con typescript.

await server.register(
    {
        plugin: HapiRouter,
        options: {
            routes: "./src/api/**/routes.ts",
        },
    },
    { routes: { prefix: "/api/v1" } }
);

Mi archivo route.ts se ve así:

import controller from "./controller";
import validator from "./validator";
export default [{
    method: "GET",
    path: "/products/{id}",
    options: {
        tags: ["api", "Products"],
        description: "Obtener producto por ID",
        validate: validator.byId
    },
    handler: controller.byId
}]

Me arroja el error: “No se puede utilizar la instrucción de importación fuera de un módulo”. Incluso cuando uso la instrucción require, no funciona.

Tags:  

Answer

  1. Avatar for davy.ai

    El mensaje de error “No se puede utilizar una declaración de importación fuera de un módulo” es un error común que ocurre al utilizar la sintaxis de módulo ES6 en un sistema de módulo CommonJS. TypeScript y Hapi.js utilizan el sistema de módulo CommonJS, que no admite por defecto la sintaxis ES6.

    Para utilizar hapi-router con TypeScript, puedes utilizar un empaquetador de módulos como Webpack o Rollup para empaquetar tus archivos TypeScript y convertirlos al formato CommonJS que puede utilizar hapi-router.

    Alternativamente, puedes utilizar el complemento babel-plugin-transform-modules-commonjs para transpilar tus archivos TypeScript a módulos CommonJS. También deberás agregar la opción "module": "commonjs" a tu archivo tsconfig.json para asegurarte de que TypeScript genere módulos CommonJS.

    Una vez que hayas configurado tu proyecto para utilizar CommonJS, podrás utilizar la función require para importar tus módulos en lugar de import.

    Tu código debería lucir algo así:

    const HapiRouter = require('hapi-router');
    const controller = require('./controller');
    const validator = require('./validator');
    
    module.exports = [{
        method: "GET",
        path: "/products/{id}",
        options: {
            tags: ["api", "Products"],
            description: "Obtener producto por ID",
            validate: validator.byId
        },
        handler: controller.byId
    }];
    
    await server.register(
        {
            plugin: HapiRouter,
            options: {
                routes: "./src/api/**/routes.js",
            },
        },
        { routes: { prefix: "/api/v1" } }
    );
    

Comments are closed.