appian php,aha2mao
最近想重写一下网站的Restful API,原来是用PHP写的,看到现在nodejs这么火也想试一下,虽然了解过nodejs但真正动手写还是头一次,找了好多教程来看然后试着敲下一代码,这篇文件主要参考了
原文里用的是MongoDB,考虑到我用的数据库是Mysql,所以我把CRUD部分的操作改成了MySql的,
1. 环境的搭建
nodejs的安装我就是不说了,我主要采用了以下Node packageExpress 4.0
nodejs下最出名的web 框架了
waterline
ORM数据操作中间件,官方团队提供的适配器:提供了对 MySQL / MongoDB / Redis 的支持,也有很多第三方开发的适配器。
sails-mysql
这个是waterline 官方提供的对MySQL的adapter
package.json 内容{
"name": "node-api",
"version": "1.0.0",
"description": "node api learn",
"main": "server.js",
"dependencies": {
"body-parser": "^1.15.0",
"express": "^4.13.4",
"sails-mysql": "^0.12.1",
"waterline": "^0.12.1"
},
"devDependencies": {
"nodemon": "^1.9.1"
}
}
运行npm install
安装所需要的所有package
首先让 express 先跑起来// server.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 8080;
var router = express.Router();
router.get('/', function(req, res) {
res.json({ message: 'hello! welcome to our api!' });
});
app.use('/api', router);
app.listen(port);
console.log('Magic happens on port ' + port);
在控制台运行node server.js
测试一下程序的运行效果
因为要调试restful API 所以推荐使用POSTMAN 一款chrome下专门用来调试restful api的工具
在地址栏里输入 http://localhost:8080/api/
可以看到,服务器已经正常启用了。接下来就是要做一些CRUD,的操作了.
2. 数据库的创建
为了保持代码的清析和可理解,所以为测试代码创建的数据库很简单:CREATE TABLE `bear` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
就一个int id 自增型主键字段 和一个 varchar(255) 的name字段,方便编码。
定义一个的model在主目录下创建一个app/models/bear.js//app/models/bear.js
var Waterline = require('waterline');
module.exports = Waterline.Collection.extend({
identity:'bear', //模型名,默认对应表名,你也可以通过tableName 属性来配置对应的表名
connection:'myLocalMysql',//所采有的数据库连接
schema: true,
attributes:{
name:'string'
}
});
在创建一个数据库链接配置文件 app/config/waterline.js//app/config/waterline.js
var mysqlAdapter = require('sails-mysql');
var wlconfig = {
adapters: {
'default':mysqlAdapter,
mysql: mysqlAdapter
},
connections: {
myLocalMysql: { //对应models中的connection
adapter : 'mysql',
host : 'localhost',
port : 3306,
user : 'root',
password : '',
database : 'test'
}
},
defaults: {
migrate: 'safe' //这个注意啊,如果是争对已经有的数据库一定要注意,小心把表全删除了
}
};
exports.config = wlconfig;
然后回到server.js引入相关文件//server.js
var Waterline = require('waterline');
var Bear = require('./app/models/bear');
var WConfig = require('./app/config/waterline');
var orm = new Waterline();
orm.loadCollection(Bear);
........
........
//把start server的代码改为
orm.initialize(WConfig.config,function(err,models){
if(err) throw err;
app.models = models.collections;
//app.set('models',models.collections);
app.connections = models.connections;
app.listen(port);
console.log('Magic happens on port ' + port);
});
3. 定义路由//server.js
...
var port = process.env.PORT || 8080;
var router = express.Router();
router.use(function(req,res,next) {
console.log('Something is happening.');
next();
});
router.get('/', function(req,res) {
res.json({ message: 'Hello! welcome to our api! '});
});
...
app.use('/api',router);
使用 express.Router() 来创建路由并增加一个中间件,这里我们只是让它简单的在控制台输出一句Something is happening.'
POST /API/BEARSrouter.route('/bears')
.post(function(req,res) {
app.models.bear.create(req.body,function(err,model) {
if(err) return res.json({ err,err }, 500);
res.json(model);
});
});
用POSTMAN测试一下
完美,不过怎么多了两个字段 createAt 和 updateAt查了文档才知道,这就是一开始的时候我没有把
migrate:设为 'safe', 不过也可以在models里关闭 autoCreatedAt:false 就可以了
GET /API/BEARS//server.js
.post(function(req,res) {
app.models.bear.create(req.body,function(err,model) {
if(err) return res.json({ err,err }, 500);
res.json(model);
});
})
.get(function(req,res) {
app.models.bear.find().exec(function(err,model){
if(err) return res.json({ err: err },500);
res.json(model);
});
});
通过id进行查改删router.route('/bears/:bear_id')
.get(function(req,res) {
app.models.bear.findOne({ id: req.params.bear_id},function(err,model) {
if(err) return res.json({ err:err },500);
res.json(model);
});
})
.put(function(req,res) {
delete req.body.id;
app.models.bear.update({ id: req.params.bear_id},req.body, function(err,model) {
if(err) return res.json({ err: err},500);
res.json(model);
});
})
.delete(function(req,res) {
app.models.bear.destroy({ id: req.params.bear_id},function(err,model) {
if(err) return res.json({err: err},500);
res.json({ status:'ok'});
});
});
总结
整个过程应该是比较简单的,由于没有涉及业务逻辑部分,所以也没有碰到什么坑,但作为一个基本入门还是比较简洁清晰的。查看原文
appian php,aha2mao相关推荐
- Appian宣布将Google AI 集成到RPA中
https://www.toutiao.com/a6695930020184982024/ 在上周圣地亚哥举行的Appian World活动上,首席执行官Calkins表示:"Appian已 ...
- 基于Appian低代码平台开发一个SpaceX网站
文章目录 Appian 背景摘要 Appian Designer SpaceX网站开发 新建Application 配置应用权限 创建Record Type Appian 背景摘要 国内几乎没有App ...
- 低代码技术与市场(Mendix与 OutSystems)
低代码技术与市场(Mendix与 OutSystems) 本文主要参考文章 参考链接 https://mp.weixin.qq.com/s/OXCBORheAx99o3fS-ZfUdg https:/ ...
- 无代码的时代真的来了吗?
所谓"无代码",并不是不存在代码,无代码平台的开发,给开发者更大的挑战.更多 机会.所以,"无代码"不是解放程序员,而是给程序员提出了更高的要求.带来更大的挑战 ...
- 如何使用人工智能发展业务并创造企业价值
如何使用人工智能发展业务并创造企业价值 如今,很多企业使用人工智能来发展他们的业务,帮助企业成长,提高生产力和收入,同时创造企业价值. 作者::Nick Ismail 来源:企业网D1Net|2020 ...
- 做 AI 大咖在顶级单位之间随兴漂移,好开心!
谷歌 AI 中国中心彻底变天了! https://mp.weixin.qq.com/s/I0P3mizPV5nf-E59w-QYrA 刚刚,CSDN(ID:CSDNNews)向谷歌中国求证,确认谷歌 ...
- Appium之Hybrid APP混合应用测试
目录 前言 1. 解决方案 2. 遇到的问题 2.1 contexts只能获取NATIVE_APP,无法获取WEBVIEW 2.2 已经能够获取到WEBVIEW,但是无法切换到WEBVIEW 前言 在 ...
- 全球及中国认知文档处理行业运营策略与应用前景分析报告2022版
全球及中国认知文档处理行业运营策略与应用前景分析报告2022版 --------------------------------------- [修订日期]:2021年12月 [搜索鸿晟信合研究院查看 ...
- 一段人人都应该知道的从Vue到React的过渡史
写在前面 以前写Vue写惯了,心血来潮,写起了react.并根据Vue官网文档的语法顺序,写了对应的React的语法,并附一个教程demo. 教程的github地址:Close2React 项目使用框 ...
最新文章
- java8 无符号_Java8包装类 新增 无符号运算方法
- 中缀表达式计算、后缀表达式计算、中缀转后缀
- QT的QItemSelection类的使用
- 前端学习(2947):node.js使用
- python爬虫模拟登录人人网
- cogs577. 蝗灾(CDQ)
- glDrawArrays,glDrawElements用法
- 李宏毅机器学习2021】机器学习模型的可解释性 (Explainable ML)
- 【微软小冰】多轮和情感机器人的先行者
- nupkg格式_nupkg文件怎么打开(package程序安装)
- BT.1120协议简介
- CAXA中添加气动液压元件库方法
- 【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战
- 打印表格留标题怎么设置_WPS怎么设置打印表格每页都有标题?
- .net\C#基于zxing的彩色、Logo二维码生成---随笔
- 破解压缩包密码-两行命令
- HP暗影精灵7笔记本OMEN16.1inch Gaming Laptop PC16-b0000原装出厂Win11系统恢复原厂OEM系统
- BitLocker解锁之后加锁
- postgresql立式版本下载_PostgreSQL下载_PostgreSQL最新官方版下载_3DM单机
- 在VC中用GDI+绘制角度可变的颜色渐变效果-.NET教程,VB.Net语言[转]
热门文章
- 【英语学习】【Level 08】U02 Movie Time L3 Now showing
- oracle监听管理工具,oracle监听器管理
- 在Unity 3D中,shader是何时编译的,在何时加载入显存中的?
- 10.28T5 tarjan+dfs
- 以我的视角看java编程世界
- Canvas or SVG?一张好图,两手准备,就在 ECharts 4.0
- Halcon算子翻译——dev_close_inspect_ctrl
- 日立数据系统进一步加强与IBM zHPF大型机合作
- 罗森伯格荣获2015年度中国数据中心优秀供应商与中国十大布线品牌两项大奖
- gem install 和 bundle 区别