1.0.4 • Published 2 years ago

@uteamjs/node v1.0.4

Weekly downloads
-
License
-
Repository
github
Last release
2 years ago

@uteamjs/node is a backend RESTful API framework built on top of the Node.js and Express.js ecosystem. It can be deployed alone or together with frontend @uteamjs/react framework. It is not required to set up any API endpoint in Express.js. You simply put the backend functions in standard node_modules component structure. This helps to simplify the deployment and management of complex enterprise applications.

Features

  • Auto API endpoint routing
  • Hot loading module
  • Simplify database access
  • Stateless API with JWT authentication
  • Advanced flow control
  • Integrate with @uteamjs/react

Installation

uteam CLI helps you automate the creation, deletion and generation of application modules and packages.

$ npm install -g uteam

Use uteam create to create Node.js application based on @uteamjs/node framework:

$ uteam create -a tutorial-node -t node-application

Change to ...packages/main folder, then start the server:

$ node server

Refer to Get Started for more details.

Example

In this following example, the name of the reducer ‘crud-api/contact’ defines the \/\ destination.

const reducer = utReducer('crud-api/contact', {
   actions: {
       ...
       load: (_, payload) => _.rows = payload.rows
   }
})

class layout extends utform {
   constructor(props) {
       ...
       props.api('load', {})
   }
   ...
}

In the server you need to create a contact.js file under the following folder structure:

/<project_folder>/your-application/
    ...
    packages/
        crud-api/
            contact.js
            ...

Under the contact.js file, add the load function:

const { sqlseries, capitalize } = require('@uteamjs/node')

exports.load = sqlseries((db, payload) => [
   db.query('select * from contact', rows => {
       rows.forEach(t => t.gender = capitalize(t.gender))
       payload.rows = rows
   })
])

The frontend props.api('load', {}) function will be routed to the backend export.load function automatically.

After you execute the query, assign the result rows to the payload object.

Corresponding frontend layout:

class layout extends _layout {
   constructor(props) {
       super(props)
       props.api('load', {})
   }

   render = () => this.Content()
}

Refer to CRUD Api tutorial for more details.

License

MIT