[译]Node.js : Building RESTful APIs using Loopback and MySQL
国庆后可能就要使用StrongLoop那套东西来做项目了
原文:http://www.javabeat.net/loopback-mysql/
Loopback是什么?
Loopback是一个开源的Node.js API框架, 使用它你能很方便的创建REST API.

安装Loopback
- 可以直接使用npm安装Loopback
- 首先使用
npm install -g strongloop安装slc命令行工具.slc命令行工具被用来创建. - 接下来使用
npm install -g loopback安装Loopback. - 在使用slc命令行工具之前,再来安装两个包:
cookie-parser和errorhandler.npm install -g cookie-parser, errorhandler.
创建loopback应用
slc 被用来创建新应用的model, model的属性, 定义数据源等.
使用 slc loopback创建应用. 运行上面的命令后会提示你输入应用的名字和应用所在的文件夹的名字(默认就是应用的名字).
G:\node>slc loopback
_-----_
| | .--------------------------.
|--(o)--| | Let's create a LoopBack |
`---------´ | application! |
( _´U`_ ) '--------------------------'
/___A___\
| ~ |
__'.___.'__
´ ` |° ´ Y `
? What's the name of your application? loopback-rest
? Enter name of the directory to contain the project: loopback-rest
create loopback-rest/
info change the working directory to loopback-rest
Generating .yo-rc.json
I'm all done. Running npm install for you to install the required dependencies. If this fails, try running the command yourself.
create .editorconfig
create .jshintignore
create .jshintrc
create README.md
create server\boot\authentication.js
create server\boot\explorer.js
create server\boot\rest-api.js
create server\boot\root.js
create server\middleware.json
create server\server.js
create .gitignore
create client\README.md
.... npm packages installation output ....
Next steps:
Change directory to your app
$ cd loopback-rest
Create a model in your app
$ slc loopback:model
Compose your API, run, deploy, profile, and monitor it with Arc
$ slc arc
Run the app
$ node
运行完成后,应用的文件夹结构如下:

自动生成了很多代码,现在先不去管他.
先运行application看看到底自动生成了些什么东西. cd到app目录运行 node ..
G:\node\loopback-rest>node .
Browse your REST API at http://localhost:3000/explorer
Web server listening at: http://localhost:3000/
在浏览器中打开 http://localhost:3000/explorer 可以看到现在应用有了哪些API.

从上面的图片可以看到关于User的API. 它们都是自动生成的.
在浏览器中打开http://localhost:3000/ :

创建MySQL数据源
首先安装loopback mysql connector: npm install loopback-connector-mysql --save.
下面我们为应用创建数据源:
G:\node\loopback-rest>slc loopback:datasource
? Enter the data-source name: mysql_db
? Select the connector for mysql_db: MySQL (supported by StrongLoop)
需要一个数据源的名字, 还要选择一个connector, 在我们的例子中是MySQL.
上面的命令会更新server/datasources.json :
"mysql_db": {
"name": "mysql_db",
"connector": "mysql"
}
We would have to update the above datasource to define the database name, hostname, port, username and password. Let us update it with the following data:
1
"mysql_db": {
"name": "mysql_db",
"connector": "mysql",
"database":"test",
"host":"localhost",
"port":3306,
"password":"password",
"username":"root"
}
创建Model
使用 slc loopback:model创建model. 运行后,要回答一堆问题model name, data source, model的基类 和 model的属性:
G:\node\loopback-rest>slc loopback:model
? Enter the model name: book
? Select the data-source to attach book to: mysql_db (mysql)
? Select model's base class: PersistedModel
? Expose book via the REST API? Yes
? Custom plural form (used to build REST URL): books
Let's add some book properties now. Enter an empty property name when done.
? Property name: name
(!) generator#invoke() is deprecated. Use generator#composeWith() - see http://yeoman.io/authoring/composability.html
invoke loopback:property
? Property type: string
? Required? Yes Let's add another book property.
Enter an empty property name when done.
? Property name: isbn
(!) generator#invoke() is deprecated. Use generator#composeWith() - see http://yeoman.io/authoring/composability.html
invoke loopback:property
? Property type: string
? Required? Yes Let's add another book property.
Enter an empty property name when done.
? Property name: author
(!) generator#invoke() is deprecated. Use generator#composeWith() - see http://yeoman.io/authoring/composability.html
invoke loopback:property
? Property type: string
? Required? No Let's add another book property.
Enter an empty property name when done.
? Property name: pages
(!) generator#invoke() is deprecated. Use generator#composeWith() - see http://yeoman.io/authoring/composability.html
invoke loopback:property
? Property type: number
? Required? No Let's add another book property.
Enter an empty property name when done.
? Property name:
完成后会生成两个文件: book.js 和book.json :

book model会记录在model-config.json 中:
"book": {
"dataSource": "mysql_db",
"public": true
}
打开http://localhost:3000/explorer/#!/books/ 能看到和books有关的. 现在使用这些, 如: http://localhost:3000/api/books 会看到一个报错table test.books was not found. 下面我们先创建表:
CREATE TABLE `test`.`book` (
`id` VARCHAR(250) NOT NULL,
`name` VARCHAR(250) NOT NULL ,
`isbn` VARCHAR(20) NOT NULL ,
`author` VARCHAR(500) NULL ,
`pages` INT NULL
) ENGINE = InnoDB;
测试CRUD APIs
http://localhost:3000/explorer 不止暴露了每个model的API, 同时还提供了测试API的工具.
添加一个Book

返回结果是
获取一个book的详细信息
使用http://localhost:3000/api/books/{id}获取详细信息.
http://localhost:3000/api/books/123:
更新一个book:
结果如下:
删除一个book:
结果如下
现在去获取id为123的book会报错:
获取book集合
通过http://localhost:3000/api/books 获取book集合:

[译]Node.js : Building RESTful APIs using Loopback and MySQL的更多相关文章
- Node.js实现RESTful api,express or koa?
文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...
- [译]Node.js - Event Loop
介绍 在读这篇博客之前,我强列建议先阅读我的前两篇文章: Getting Started With Node.js Node.js - Modules 在这篇文章中,我们将学习 Node.js 中的事 ...
- Node.js:RESTful API
ylbtech-Node.js:RESTful API 1.返回顶部 1. Node.js RESTful API 什么是 REST? REST即表述性状态传递(英文:Representational ...
- [译]Node.js Interview Questions and Answers (2017 Edition)
原文 Node.js Interview Questions for 2017 什么是error-first callback? 如何避免无止境的callback? 什么是Promises? 用什么工 ...
- 译\Node.js应用的持续部署
Node.js应用的持续部署 翻译前 翻译自:https://blog.risingstack.com/continuous-deployment-of-node-js-applications/ 正 ...
- [译]Node.js Best Practices - Part 2
原文: https://blog.risingstack.com/node-js-best-practices-part-2/ 统一风格 在大团队开发JS应用, 创建一个风格指南是很有必要的. 推荐看 ...
- [译]Node.js面试问与答
原文: http://blog.risingstack.com/node-js-interview-questions/ 什么是error-first callback? 如何避免无休止的callba ...
- [译]Node.js Best Practices
原文: http://blog.risingstack.com/node-js-best-practices/ 下面的的最佳实践分为代码风格和开发工作流两种. 代码风格 Callback约定 Modu ...
- (译)Node.js的 EventEmitter 教程
原文标题:Node.js EventEmitter Tutorial 原文链接:http://www.hacksparrow.com/node-js-eventemitter-tutorial.htm ...
随机推荐
- [NOIP2012] 提高组 洛谷P1084 疫情控制
题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都, 也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散 ...
- Linux下修改进程名称
catalog . 应用场景 . 通过Linux prctl修改进程名 . 通过修改进程argv[]修改进程名 . 通过bash exec命令修改一个进程的cmdline信息 1. 应用场景 . 标识 ...
- Linux Overflow Vulnerability General Hardened Defense Technology、Grsecurity/PaX
Catalog . Linux attack vector . Grsecurity/PaX . Hardened toolchain . Default addition of the Stack ...
- MOOCULUS微积分-2: 数列与级数学习笔记 6. Power series
此课程(MOOCULUS-2 "Sequences and Series")由Ohio State University于2014年在Coursera平台讲授. PDF格式教材下载 ...
- 数据结构1 线段树查询一个区间的O(log N) 复杂度的证明
线段树属于二叉树, 其核心特征就是支持区间加法,这样就可以把任意待查询的区间$[L, R]$分解到线段树的节点上去,再把这些节点的信息合并起来从而得到区间$[L,R]$的信息. 下面证明在线段树上查询 ...
- CF 370B Berland Bingo
题目链接: 传送门 Berland Bingo time limit per test:1 second memory limit per test:256 megabytes Descrip ...
- python 中的map(), reduce(), filter
据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法. 简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数: I ...
- 【Alpha版本】冲刺-Day8
队伍:606notconnected 会议时间:11月16日 会议总结 张斯巍(433) 今天安排:回收站界面设计 完成度:90% 明天计划:关注界面设计 遇到的问题:无 感想:有时候自己设计的队友说 ...
- Linux下,使用Git管理 dotfiles(配置文件)
1.管理你的 dotfiles 作为一个计算机深度使用者,并且长期使用 Linux 作为主要操作系统,折腾各种功能强大的软件是常有的事儿.这些软件有它们各自的配置文件,通常以 . 开头,因此有人管它们 ...
- linux Basis --- tar command
-c: compress archives -x:decompress archives -t:check archives -z:whether it has the attribute of gz ...