Saltar al contenido

Cree un servicio comercial con Node.js usando Visual Studio Code


Paso 1: establecer un entorno de desarrollo local

Antes de comenzar, asegúrese de haber completado los requisitos previos.

  1. Abra una ventana de línea de comando e instale el cds equipos desarrollados en todo el mundo ejecutando el siguiente comando:

    npm i -g @sap/cds-dk
    

    Este proceso tarda varios minutos en instalar el cds comando, que utilizará en los siguientes pasos.

    En MacOS / Linux, debe seguir los pasos descritos aquí.

    Si una persona es mayor @sap/cds paquete ya instalado en su máquina, primero debe eliminarlo; si es así, se le indicará que lo haga.

    Si tiene problemas, consulte el Guía para resolver problemas en la documentación de CAP para más detalles.

  2. Para verificar que la instalación fue exitosa, ejecute cds sin argumentos:

    cds
    

    Esto enumera lo que está disponible cds pedidos. Por ejemplo, use cds version para comprobar la versión que ha instalado. Para conocer la última versión, consulte la Notas de lanzamiento para la PAC.

Hecho

Inicie sesión para responder la pregunta

Paso 2: Instale la extensión de código de Visual Studio

  1. Vamos Mercado de Visual Studio.

  2. Escoger Instalación.

extension_marketplace

Visual Studio Code abre la página de datos de extensiones.

  1. En VS Code seleccione Instalación para habilitar la extensión para SAP CDS Language Support.

extension_VSCode

Si la extensión ya está instalada y habilitada en VS Code, se actualizará automáticamente.

Obtenga más información sobre las funciones de esta breve historia. manifestación y ver el funciones y comandos en la documentación CAP.

Hecho

Inicie sesión para responder la pregunta

Paso 3: iniciar el proyecto

Con su herramienta de línea de comandos CDS instalada, ahora puede crear un nuevo proyecto basado en CBT, en forma de un nuevo directorio con varios ajustes preestablecidos.

  1. Abra una ventana de línea de comando y ejecute el siguiente comando en una carpeta de su elección para crear el proyecto:

    cds init my-bookshop
    

    Esto crea una carpeta my-bookshop en el directorio actual.

  2. Abra Visual Studio Code, vaya a Archivo Carpeta abierta y seleccione el my-bookshop carpeta.

  3. Vamos Terminal Nueva terminal para abrir una ventana de línea de comandos dentro de Visual Studio Code y ejecutar el siguiente comando en el nivel raíz de su proyecto:

    npm install
    
  4. En la ventana de la línea de comandos, ejecute lo siguiente:

      cds watch
    

    Este comando intenta cds servidor. Siempre que alimente su proyecto con contenido nuevo, por ejemplo, agregando o modificando .cds, .json, o .js archivos, el servidor se reinicia automáticamente para servir el nuevo contenido.

    Como no hay contenido en el proyecto hasta ahora, permanece esperando contenido con un mensaje como se muestra:

    cds serve all --with-mocks --in-memory?
    ( watching: cds,csn,csv,ts,mjs,cjs,js,json,properties,edmx,xml,env... )
    
    
        No models found in db/,srv/,app/,schema,services.
        Waiting for some to arrive...
    
  1. Abra una ventana de línea de comando y ejecute el siguiente comando en una carpeta de su elección para crear el proyecto:

    cds init my-bookshop
    

    Esto crea una carpeta my-bookshop en el directorio actual.

  2. Abra Visual Studio Code, vaya a Archivo Abierto y seleccione el my-bookshop carpeta.

  3. Vamos Mirar Paleta de pedidos Terminal: cree una nueva terminal integrada para abrir una ventana de línea de comandos dentro de Visual Studio Code y ejecutar el siguiente comando en el nivel raíz de su proyecto:

    npm install
    
  4. En la ventana de la línea de comandos, ejecute lo siguiente:
      cds watch
    

    Este comando intenta cds servidor. Siempre que alimente su proyecto con contenido nuevo, por ejemplo, agregando o modificando .cds, .json, o .js archivos, el servidor se reinicia automáticamente para servir el nuevo contenido.

    Como no hay contenido en el proyecto hasta ahora, permanece esperando contenido con un mensaje como se muestra:

    cds serve all --with-mocks --in-memory?
    ( watching: cds,csn,csv,ts,mjs,cjs,js,json,properties,edmx,xml,env... )
    
    
        No models found in db/,srv/,app/,schema,services.
        Waiting for some to arrive...
    

Hecho

Inicie sesión para responder la pregunta

Paso 4: Defina su primer servicio

Después de iniciar el proyecto, debería ver las siguientes carpetas vacías:

  • app: para artefactos de la interfaz de usuario
  • db: para el modelo de esquema de nivel de base de datos
  • srv: para la capa de servicio definida

Estructura de carpetas

  1. Vamos a alimentarlo agregando un modelo de dominio simple. Sa srv seleccione la carpeta Archivo nuevo en Visual Studio Code y cree un nuevo archivo llamado cat-service.cds.

  2. Agregue el siguiente código al archivo cat-service.cds:

    using { Country, managed } from '@sap/cds/common';
    
    service CatalogService {
    
      entity Books {
        key ID : Integer;
        title  : localized String;
        author : Association to Authors;
        stock  : Integer;
      }
    
      entity Authors {
        key ID : Integer;
        name   : String;
        books  : Association to many Books on books.author = $self;
      }
    
      entity Orders : managed {
        key ID  : UUID;
        book    : Association to Books;
        country : Country;
        amount  : Integer;
      }
    
    }
    

    Recuerde guardar sus archivos (atajo de teclado CTRL + S.).

  3. Una vez que haya guardado su archivo, seguirá ejecutándose cds watch reacciona inmediatamente a algunas salidas nuevas como se muestra a continuación:

    [cds] - using bindings from: { registry: '~/.cds-services.json' }
    [cds] - connect to db > sqlite { database: ':memory:' }
    /> successfully deployed to sqlite in-memory db
    
    [cds] - serving CatalogService { at: '/catalog' }
    
    [cds] - launched in: 1557.190ms
    [cds] - server listening on { url: 'http://localhost:4004' }
    [ terminate with ^C ]
    

    Esto significa, cds watch detectar los cambios i srv/cat-service.cds y recordó automáticamente la base de datos SQLite al reiniciar el proceso del servidor.

  4. Para probar su servicio, vaya a: http: // localhost: 4004

solicitud

No verá datos porque aún no ha agregado un modelo de datos. Haga clic en los enlaces proporcionados para ver si el servicio se está ejecutando.

Hecho

Inicie sesión para responder la pregunta

Paso 5: proporcione datos falsos

Agregue la lógica del proveedor de servicios para restaurar datos falsos.

  1. Sa srv carpeta, cree un nuevo archivo llamado cat-service.js.

  2. Agregue el siguiente código al archivo cat-service.js:

    module.exports = (srv) => {
    
     // Reply mock data for Books...
     srv.on ('READ', 'Books', ()=>[
       { ID:201, title:'Wuthering Heights', author_ID:101, stock:12 },
       { ID:251, title:'The Raven', author_ID:150, stock:333 },
       { ID:252, title:'Eleonora', author_ID:150, stock:555 },
       { ID:271, title:'Catweazle', author_ID:170, stock:222 },
     ])
    
     // Reply mock data for Authors...
     srv.on ('READ', 'Authors', ()=>[
       { ID:101, name:'Emily Brontë' },
       { ID:150, name:'Edgar Allen Poe' },
       { ID:170, name:'Richard Carpenter' },
     ])
    
    }
    

    Recuerde guardar sus archivos (atajo de teclado CTRL + S.).

  3. Para probar su servicio, haga clic en estos enlaces:

    Debe agregar los datos falsos que agregó al Books y Authors entidades.

Hecho

Inicie sesión para responder la pregunta

Paso 6: agregue un modelo de datos y especifique el servicio de personalización

Para comenzar rápidamente, ya ha agregado una definición de servicio todo en uno simple. Sin embargo, normalmente colocaría las definiciones de una entidad normalizada en un modelo de datos separado y sus servicios revelarían vistas potencialmente desnormalizadas de esas entidades.

  1. Sa db seleccione la carpeta Archivo nuevo en Visual Studio Code y cree un nuevo archivo llamado data-model.cds.

  2. Agregue el siguiente código al archivo data-model.cds:

    namespace my.bookshop;
    using { Country, managed } from '@sap/cds/common';
    
    entity Books {
      key ID : Integer;
      title  : localized String;
      author : Association to Authors;
      stock  : Integer;
    }
    
    entity Authors {
      key ID : Integer;
      name   : String;
      books  : Association to many Books on books.author = $self;
    }
    
    entity Orders : managed {
      key ID  : UUID;
      book    : Association to Books;
      country : Country;
      amount  : Integer;
    }
    
  3. Abre el archivo cat-service.cds y reemplace el código existente:

    using my.bookshop as my from '../db/data-model';
    
    service CatalogService {
      entity Books @readonly as projection on my.Books;
      entity Authors @readonly as projection on my.Authors;
      entity Orders @insertonly as projection on my.Orders;
    }
    

    Recuerde guardar sus archivos (atajo de teclado CTRL + S.).

Hecho

Inicie sesión para responder la pregunta

Paso 7: agregue los detalles iniciales

En Visual Studio Code, colocará archivos CSV estándar en la carpeta db/csv para llenar las tablas de su base de datos con datos iniciales.

  1. Sa db carpeta, seleccione Archivo nuevo y en csv/my.bookshop-Authors.csv para crear una nueva carpeta csv con el archivo nombrado my.bookshop-Authors.csv. Agregue lo siguiente al archivo:

    ID;name
    101;Emily Brontë
    107;Charlote Brontë
    150;Edgar Allen Poe
    170;Richard Carpenter
    
  2. En el recién creado csv carpeta, seleccione Archivo nuevo y crea un archivo llamado my.bookshop-Books.csv. Agregue lo siguiente al archivo:

    ID;title;author_ID;stock
    201;Wuthering Heights;101;12
    207;Jane Eyre;107;11
    251;The Raven;150;333
    252;Eleonora;150;555
    271;Catweazle;170;22
    

    Recuerde guardar sus archivos (atajo de teclado CTRL + S.).

    Asegúrese de tener una jerarquía de carpetas ahora db/csv/.... Recuerda que el csv Los archivos deben tener un nombre similar a las entidades en su modelo de datos y deben estar ubicados dentro del db/csv carpeta.

    Después de agregar estos archivos, cds watchel servidor se reinicia con la salida, indicando que los archivos se encontraron y su contenido se cargó automáticamente en la base de datos:

    [cds] - using bindings from: { registry: '~/.cds-services.json' }
    [cds] - connect to db > sqlite { database: ':memory:' }
    > filling my.bookshop.Authors from db/csv/my.bookshop-Authors.csv
    > filling my.bookshop.Books from db/csv/my.bookshop-Books.csv
    /> successfully deployed to sqlite in-memory db
    
    [cds] - serving CatalogService { at: '/catalog', impl: 'srv/cat-service.js' }
    
    [cds] - launched in: 1009.187ms
    [cds] - server listening on { url: 'http://localhost:4004' }
    [ terminate with ^C ]
    
  3. Eliminar el código con datos falsos cat-service.js, porque desea cargar los datos desde csv archivos.

  4. Para probar su servicio, abra un navegador web y vaya a:

    http: // localhost: 4004 / catalog / Books

    http: // localhost: 4004 / catálogo / Autores

    Debido a que ahora tiene una base de datos SQL totalmente capaz con algunos datos iniciales, puede enviar consultas OData complejas, que atienden los proveedores de tipos integrados.

    http: // localhost: 4004 / catalog / Authors? $ expansión = libros ($ select = ID, título)

    Debería ver un libro llamado Jane Eyre. Si no es así, asegúrese de haber eliminado los datos falsos. cat-service.js.

Hecho

Inicie sesión para responder la pregunta

Paso 8: agregue una base de datos continua

Antes de continuar, asegúrese de haber completado los requisitos previos y de tener instalado SQLite (solo para usuarios de Windows).

En lugar de usar memoria, también puede usar bases de datos duraderas.

  1. Ambos cds watch correr, presionar CTRL + C. en la línea de comando para detener el servicio.

  2. Instalación SQLite3 paquetes.

    npm i sqlite3 -D
    
  3. Implementar el modelo de datos para SQLite base de datos:

    cds deploy --to sqlite:db/my-bookshop.db
    

    Ahora estas creado SQLite archivo de base de datos sobre db/my-bookshop.db.

    Esta configuración se guarda en su package.json como fuente de datos predeterminada. Para una implementación posterior con la configuración predeterminada, todo lo que tiene que hacer es ejecutar cds deploy.

    La diferencia con la base de datos de memoria proporcionada automáticamente es que ahora obtiene una base de datos continua almacenada en el archivo local.

  4. Abierto SQLite y ver la base de datos recién creada:

    sqlite3 db/my-bookshop.db -cmd .dump
    

    Si esto no funciona, compruebe si SQLite instalado. En Windows, es posible que deba ingresar la ruta completa a SQLite, por ejemplo: C:sqlitesqlite3 db/my-bookshop.db -cmd .dump. Encuentre los pasos sobre cómo instalarlo en la guía de solución de problemas en la sección ¿Cómo puedo instalar SQLite? en la documentación de CAP para más detalles.

  5. Interrumpido SQLite y vuelva al directorio de su proyecto, presione CTRL + C..

  6. Ejecute su servicio.

    cds watch
    
    [cds] - using bindings from: { registry: '~/.cds-services.json' }
    [cds] - connect to db > sqlite { database: 'db/my-bookshop.db' }
    [cds] - serving CatalogService { at: '/catalog', impl: 'srv/cat-service.js' }
    
    [cds] - launched in: 871.970ms
    [cds] - server listening on { url: 'http://localhost:4004' }
    [ terminate with ^C ]
    

Hecho

Inicie sesión para responder la pregunta

Paso 9: Pruebe los controladores de tipo con Postman

Ahora puede ver los controladores genéricos lanzados con CBT en acción.

  1. Abra la aplicación Postman.

    Puede utilizar cualquier otro cliente HTTP que no sea Postman.

  2. Haga clic en el siguiente enlace y guarde el archivo en una carpeta de su elección: cartero.json.

  3. En la aplicación Postman, use el Importar botón de la barra de herramientas:

    Importación de cartero

  4. Escoger Importar archivo en el asistente. Haga clic en Selecciona archivos y seleccione el archivo que guardó anteriormente o agréguelo directamente mediante arrastrar y soltar.

    Importación de cartero desde archivo

  5. En la colección importada, realice las diversas solicitudes en el metadata y CRUD grupos. Todos deben devolver las respuestas correctas.

    Prueba la solicitud

    Con la implementación de su servicio actual, simplemente no puede obtenerlo POST pedidos. Aon GET o DELETE si un pedido falla, ya que especificó el Orders entidad a ser @insertonly en srv/cat-service.cds.

Paso 10: agregar lógica personalizada

  1. En Visual Studio Code, abra el archivo cat-service.js y reemplace el código existente:

      module.exports = (srv) => {
    
      const {Books} = cds.entities ('my.bookshop')
    
      // Reduce stock of ordered books
      srv.before ('CREATE', 'Orders', async (req) => {
        const order = req.data
        if (!order.amount || order.amount <= 0)  return req.error (400, 'Order at least 1 book')
        const tx = cds.transaction(req)
        const affectedRows = await tx.run (
          UPDATE (Books)
            .set   ({ stock: {'-=': order.amount}})
            .where ({ stock: {'>=': order.amount},/*and*/ ID: order.book_ID})
        )
        if (affectedRows === 0)  req.error (409, "Sold out, sorry")
      })
    
      // Add some discount for overstocked books
      srv.after ('READ', 'Books', each => {
        if (each.stock > 111)  each.title += ' -- 11% discount!'
      })
    
    }
    

    Recuerde guardar sus archivos (atajo de teclado CTRL + S.).

    Siempre que se crean comandos, se solicita este código. Actualiza el stock de libros en una cierta cantidad, si no quedan suficientes libros.

  2. En Postman, haz el GET Books solicitud.

    Mira el stock de libros 201.

    Prueba la solicitud

  3. Ejecución de uno de los POST Orders solicitud.

    Esto estimula la lógica anterior y reduce el stock.

  4. Un GET Books intentar otra vez.

    El stock de libros 201 más bajo que nunca.

Hecho

Inicie sesión para responder la pregunta

Danos 55 segundos de tu tiempo para ayudarnos a mejorar