LoopBack 3.x Framework
LoopBack 3.x is an open-source Node.js framework designed for rapidly creating dynamic end-to-end REST APIs with minimal coding. It facilitates data access from a wide array of databases, including Oracle, MySQL, PostgreSQL, MS SQL Server, and MongoDB, and supports incorporating complex model relationships and robust access controls. The framework also offers built-in services for mobile application development, such as push notifications, geolocation, and file storage. The current stable version for LoopBack 3 is 3.28.0, but it is in Maintenance LTS (Long Term Support) mode, having passed its official End-Of-Life (EOL) in December 2020. Consequently, only critical bugs and security fixes are provided for this version, and users are strongly encouraged to migrate to LoopBack 4, which represents the actively developed and supported iteration of the framework. LoopBack 3 applications are typically built using its collection of Node.js modules, Yeoman generators for scaffolding, and client SDKs.
Common errors
-
Error: Cannot find module 'loopback-datasource-juggler'
cause The core `loopback-datasource-juggler` package is missing from your project's `node_modules`.fixInstall it explicitly: `npm install loopback-datasource-juggler` or ensure it's in your `package.json` dependencies and run `npm install`. -
TypeError: app.boot is not a function
cause You are attempting to call `app.boot` directly, but `boot` is a function exported by the separate `loopback-boot` package, not a method on the `loopback` app object.fixEnsure `loopback-boot` is installed (`npm install loopback-boot`) and then require and use it: `const boot = require('loopback-boot'); boot(app, __dirname, callback);` -
Access to XMLHttpRequest at 'http://localhost:3000/api/models' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
cause Cross-Origin Resource Sharing (CORS) is not properly configured or enabled on your LoopBack API server, preventing requests from different origins.fixEnable CORS middleware in your `server.js` or `middleware.json` by adding `app.use(loopback.cors());` or configuring it in `middleware.json`.
Warnings
- deprecated LoopBack 3.x is in Maintenance LTS mode and has passed its End-Of-Life (EOL) date in December 2020. It receives only critical bug fixes and security patches. New feature development and active support have ceased.
- breaking The `loopback-datasource-juggler` package, which is core to LoopBack's data handling, was moved from `peerDependencies` to `dependencies` in LoopBack 3.0. This might affect existing project setups that relied on `peerDependencies` behavior.
- breaking Major breaking changes exist between LoopBack 2.x and 3.0. These include API changes, configuration updates, and dependency shifts requiring careful migration.
- gotcha Older versions of LoopBack 3.x had a bug in `User.prototype.verify` that incorrectly concatenated query-string components, potentially leading to malformed verification links or unexpected redirect behavior.
Install
-
npm install loopback -
yarn add loopback -
pnpm add loopback
Imports
- loopback
import loopback from 'loopback';
const loopback = require('loopback'); - app.Model
import { Model } from 'loopback';const MyModel = loopback.Model.extend('MyModel', { /* ... */ }); - app.boot
loopback.boot(app, __dirname);
const boot = require('loopback-boot'); boot(app, __dirname, function(err) { /* ... */ });
Quickstart
const loopback = require('loopback');
const boot = require('loopback-boot');
const path = require('path');
const app = module.exports = loopback();
app.start = function() {
// Start the web server
return app.listen(function() {
app.emit('started');
const baseUrl = app.get('url').replace(/\/$/, '');
console.log('Web server listening at: %s', baseUrl);
if (app.get('loopback-component-explorer')) {
const explorerPath = app.get('loopback-component-explorer').mountPath;
console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
}
});
};
// Bootstrap the application (configures models, datasources, middleware)
boot(app, __dirname, function(err) {
if (err) throw err;
// Start the server if `$ node server.js` is run directly
if (require.main === module) {
app.start();
}
});
// Example: Define a simple root endpoint
app.get('/', (req, res) => {
res.send('LoopBack 3.x application is running!');
});