node.js框架StrongLoop快速入门实战

目录

一、StrongLoop框架简介

二、安装StrongLoop框架

三、创建项目my-loopback-project

四、项目布局和结构

五、配置连接mysql数据库

六、实现自动生成api接口


一、StrongLoop框架简介

StrongLoop是一个强大的框架,它基于Node.js构建,几乎涵盖了移动开发所需的所有功能。这个框架由IBM的一个子公司开发和维护,它使用开源的LoopBack作为基础,这使得它非常灵活和可扩展。StrongLoop的好处在于它可以帮助我们快速地构建移动应用的后端服务。它提供了一整套解决方案,包括API的创建、数据模型管理、数据库连接等等。这意味着我们不需要从头开始编写这些功能,而是可以直接使用StrongLoop提供的现成工具来完成工作。此外,StrongLoop还支持多种数据库系统,如MySQL、MongoDB、PostgreSQL等,这让我们可以根据项目需求选择最适合的数据库来存储和管理数据。最重要的是,StrongLoop可以帮助我们轻松地构建RESTful API,这对于现代Web应用非常重要,因为它们通常需要与前端分离的后端API来支持多平台的应用开发。

StrongLoop框架的核心优势和功能可以总结为以下几点:

  1. 全栈开发能力
    • StrongLoop提供了从前端到后端的全套开发工具和服务,包括API创建、数据模型管理、数据库连接等。
    • 它通过提供全面的后端解决方案,大大减少了开发者需要编写的代码量,使得快速开发成为可能。
  2. 高度扩展性
    • 基于LoopBack.io构建,StrongLoop拥有良好的扩展性,允许开发者根据项目需求轻松添加功能模块。
    • 随着项目需求的增加,开发者可以通过添加功能模块来拓展框架的能力。
  3. 数据库支持
    • StrongLoop支持多种数据库系统,如MySQL、MongoDB、PostgreSQL等,满足不同开发场景的数据存储和处理需求。
    • 这种多数据库支持确保了开发者可以为不同的应用场景选择最合适的数据存储解决方案。
  4. 自动生成SDK
    • 根据后端模型,StrongLoop可以自动生成对应的前端SDK,极大地简化了前后端的协同工作。
    • 这一特性不仅提高了开发效率,还减少了前后端集成中可能出现的错误。
  5. DevOps工具集成
    • StrongLoop集成了调试、包管理、构建、部署、集群管理和日志记录等DevOps工具,帮助开发者在整个应用生命周期中进行有效管理和维护。
    • 这些工具的集成有助于确保项目的高效运行和稳定发布。
  6. 实时通信功能
    • 对于需要实时数据交互的应用,StrongLoop提供了实时通信的功能,大大提升了用户体验。
    • 实时通信功能对于构建动态和交云的现代应用尤为重要,比如即时消息通知、实时数据分析等场景。

二、安装StrongLoop框架

  • 需要安装完成node环境
  • 执行命令安装strongloop :npm install -g strongloop 或者 yarn global add strongloop 

三、创建项目my-loopback-project

创建项目my-loopback-project

具体命令如下

  1. slc loopback
  2. 填写应用名称
  3. 输入目录名称包含项目(这里可以回车跳过)
  4. 使用版本2.x,3.x,根据个人需求选择
  5. 创建什么种类的应用程序,根据个人需求选择
  6. cd 项目目录名称,如testApp
  7. npm install 
  8. node server/server.js  启动脚本

四、项目布局和结构

Standard project layout(标准的项目布局)

在 Loopback 根目录下有三个 子目录:

  • server - Node 应用脚本和配置文件
  • client - 客户端 JavaScript, HTML, 和 CSS 文件.
  • common - 文件共用客户端和服务器. 子目录 common/models 目录 包含所有模型JSON和JavaScript文件
  • definitions - API and product definition YAML files (IBM API Connect only).

目录结构

  1. |- node-modules/
  2. |- package.json
  3. |- README.md
  4. |- server/ 后台服务端目录
  5. | |- boot/ 初始化脚本路径, 里面的文件会按照字母顺序执行.
  6. | |- config.json 应用程序配置文件 | 可以通过 app.get('setting-name')获取
  7. | |- component-config.json [LoopBack组件]加载的配置
  8. | |- datasources.json 数据源配置 | 可以通过 app.datasources['datasource-name'] 获取
  9. | |- middleware.json 中间件定义文件
  10. | |- model-config.json Model 定义文件
  11. | |- server.js 核心启动文件
  12. |
  13. |- client/
  14. | |- README.md
  15. | |- other
  16. |
  17. |- common/ 共享文件夹
  18. | |- models/ 自定义模型文件夹 | myModel = app.models.myModelName
  19. | |- model-name.js 模型逻辑脚本
  20. | |- model-name.json 模型配置脚本 | 小写

五、配置连接mysql数据库

命令:npm install --save loopback-connector-mysql

生成datasources.json文件

修改文件内容,改成自己的配置

{
  "db": {
    "host": "localhost",
    "port": 3306,
    "url": "mysql://root:haosql@localhost/xunshu",
    "name": "db",
    "connector": "mysql"
  }
}
这段 "url": "mysql://root:haosql@localhost/xunshu",

root为用户名

haosql为密码

xunshu为数据库名

六、实现自动生成api接口

命令:slc loopback:model创建一个数据模型。

我们以sys_user数据表为例子,这个表字段为id,username,password

在model-config.json配置模型数据库为db,这个db就是对应datasources.json文件的name,public为true开启rest访问,开启后访问http://localhost:3000/explorer这个地址,api会暴露出来。

  "sys_user": {
    "dataSource": "db",
    "public": true
  }

然后再server/models下创建sys_user.js和sys_user.json文件

{
  "name": "sys_user",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "id": {
      "type": "string"
    },
    "username": {
      "type": "string"
    },
    "password": {
      "type": "string"
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {}
}

这段name的sys_user为表名,properties为返回的id,username,password

'use strict';

module.exports = function(SysUser) {
  // 定义一个方法来查询sys_user表的username字段和password字段
  SysUser.getUserInfo = function(userId, cb) {
    SysUser.findById(userId, function(err, instance) {
      if (err) return cb(err);
      cb(null, { id: instance.id, username: instance.username, password: instance.password });
    });
  };

  SysUser.remoteMethod('getUserInfo', {
    accepts: {arg: 'id', type: 'number', required: true},
    returns: {arg: 'userInfo', type: 'object', root: true},
    http: {path: '/:id/userinfo', verb: 'get'}
  });
};

这段代码就是创建一个sys_user的方法,自动生成一些api。

最后访问前需要关闭掉自带的权限验证

在server/boot/authentication.js关闭掉 server.enableAuth()

'use strict';

module.exports = function enableAuthentication(server) {
  // enable authentication
 // server.enableAuth();

};

最后就可以启动:http://localhost:3000/explorer

点击Try it out!可以看到查询成功,就说明配置没问题了。

七、学习网站和截图参考

学习网站:README - 《Loopback 中文文档》 - 书栈网 · BookStack

截图参考↓

目录结构

sys_user.js

sys_user.json

mysql数据表

model-config.json配置

authentication取消权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/875971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《信息系统安全》课程实验指导

第1关:实验一:古典密码算法---代换技术 任务描述 本关任务:了解古典密码体制技术中的代换技术,并编程实现代换密码的加解密功能。 注意所有明文字符为26个小写字母,也就是说字母表为26个小写字母。 相关知识 为了完…

【开源免费】基于SpringBoot+Vue.JS高校心理教育辅导系统(JAVA毕业设计)

本文项目编号 T 031 ,文末自助获取源码 \color{red}{T031,文末自助获取源码} T031,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

JEE 设计模式

Java 数据访问对象模式 Java设计模式 - 数据访问对象模式 数据访问对象模式或DAO模式将数据访问API与高级业务服务分离。 DAO模式通常具有以下接口和类。 数据访问对象接口定义模型对象的标准操作。 数据访问对象类实现以上接口。可能有多个实现,例如&#xff0c…

LVGL学习

注:本文使用的lvgl-release-v8.3版本,其它版本可能稍有不同。 01 LVGL模拟器配置 day01-02_课程介绍_哔哩哔哩_bilibili LVGL开发教程 (yuque.com) 如果按照上述视频和文档中配置不成功的话,直接重装VsCode,我的就是重装以后就…

Git提交有乱码

服务器提交记录如图 可知application.properties中文注释拉黄线 ,提示Unsupported characters for the charset ISO-8859-1 打开settings - Editor - File Encodings 因为我们项目的其他文件都是UTF-8,所以,我们将默认值都改成UTF-8 然后…

打造民国风格炫酷个人网页:用HTML和CSS3传递民国风韵

附源码!!! 感谢支持 小弟不断创作网站demo感兴趣的可以关注支持一下 对了 俺在结尾带上了自己用的 背景 大家可以尝试换一下效果更好哦~~~ 如何创建一个民国风格的炫酷网页 在这篇博客中,我们将展示如何制作一个结合民国风格和…

【无标题】Efinity 0基础进行流水灯项目撰写(FPGA)

文章目录 前言一、定义概念 缩写1. 二、性质1.2. 三、使用步骤编译常见错误1. 没加分号2. end 写多了 编译成功的标志总结参考文献 前言 数电课设 使用 FPGAIDE 使用 Efinity 一、定义概念 缩写 1. 二、性质 1. 2. 三、使用步骤 python代码块matlab代码块c代码块编译…

Vue3+CesiumJS相机定位camera

new Cesium.Camera (scene) 摄像机由位置,方向和视锥台定义。 方向与视图形成正交基准,上和右视图x上单位矢量。 视锥由6个平面定义。每个平面都由 Cartesian4 对象表示,其中x,y和z分量定义垂直于平面的单位矢量,w分量…

C++《类和对象》(下)

在之前类和对象(中)我们学习了类当中的6大默认成员函数,我们了解了6大成员函数的结构特征和特点以及在不同情况各个成员函数是如何调用的,那么接下来我们在本篇当中将继续学习之前在学习构造函数中未了解的初始化列表,…

【Python】生成图片验证码

1. 首先安装第三方库PIL(图像处理库) pip install pillow 2. 编写生成验证码代码 这里字体 SimHei.ttf 文件要放在该文件目录下。 import random from PIL import Image, ImageDraw, ImageFont, ImageFilterdef check_code(width128, height30, char…

ros学习笔记.4 Path Planning Part 2 (避障)

避障是如何工作的什么是局部规划器?什么是局部成本图?路径规划回顾如何使用动态重新配置和其他 Rviz 工具 局部规划器 一旦全局规划器计算出要遵循的路径,该路径就会发送给局部规划器。然后,局部规划器将执行全局规划的每个部分&…

比较stl库的ostringstream与Qt的QString::arg(),QString::number()

需求: 显示一个float或者double类型的数,要求小数点后的数字位数为定值。 考虑STL库的ostringstream或者Qt的QString::arg(), number 对于stringstream,使用比较繁琐,要联合使用std::fixed和std::setprecision才能实现固定小数位数显示&am…

UE5-俯视角色移动(蓝图)01

效果如下: 蓝图节点如下: 使用示例自带的移动蓝图,发现角色只能平移,不会转向。必须勾选以下选项: 点击蓝图-》组件-》SpringArm节点。在细节中找到摄像机设置,勾选以下: 在 点击蓝图-》组件-…

PowerShell install 一键部署Oracle21c-xe

Oracle21c-xe前言 无论您是开发人员、DBA、数据科学家、教育工作者,还是仅仅对数据库感兴趣,Oracle Database Express Edition (XE) 都是理想的入门方式。它是全球企业可依赖的强大的 Oracle Database,提供简单的下载、易于使用和功能齐全的体验。您可以在任何环境中使用该…

Qt多语言/多语种详细开发教程

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。 今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语…

Vue3+TS项目给el-button统一封装一个点击后转圈效果的钩子函数按钮防抖

前言 每个按钮都要单独定义一个loading变量,并且在接口请求前修改为true,接口响应后再修改为false,封装后这段重复的逻辑就可以统一管理不用每次都写一遍了。 效果 新建一个公共的src\common.ts import { ref } from "vue"expor…

Azure web app has no access to openai private endpoint in virtual network

题意:"Azure Web 应用无法访问虚拟网络中的 OpenAI 私有端点。" 问题背景: I am trying to host a web application similar to a private ChatGPT instance within a secluded virtual network, ensuring that theres no external internet …

服务器环境搭建-5 Nexus搭建与使用介绍

背景 本文介绍nexus的安装、配置和使用,之后通过案例的方式演示使用过程。 1.下载和安装 本文使用Nexus 3.x版本进行演示 下载地址:Download Nexus Repository OSS | Sonatype 国外网站下载速度较慢,也可以通过百度网盘下载(提取码:9999): …

形态学算法(连通分量提取,区域最大值提取)

文章目录 二值图像形态学算法连通分量提取 灰度图形态学算法灰度重建区域最大值查找 本文先列举一些近期用到的形态学算法,以后可能会再进行补充。 二值图像形态学算法 连通分量提取 在上一篇文章中已经提到连通分量的概念,这里再进行回顾:…

Leetcode 寻找重复数

可以使用 位运算 来解决这道题目。使用位运算的一个核心思想是基于数字的二进制表示&#xff0c;统计每一位上 1 的出现次数&#xff0c;并与期望的出现次数做比较。通过这种方法&#xff0c;可以推断出哪个数字重复。 class Solution { public:int findDuplicate(vector<i…