最近想重写一下网站的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相关推荐

  1. Appian宣布将Google AI 集成到RPA中

    https://www.toutiao.com/a6695930020184982024/ 在上周圣地亚哥举行的Appian World活动上,首席执行官Calkins表示:"Appian已 ...

  2. 基于Appian低代码平台开发一个SpaceX网站

    文章目录 Appian 背景摘要 Appian Designer SpaceX网站开发 新建Application 配置应用权限 创建Record Type Appian 背景摘要 国内几乎没有App ...

  3. 低代码技术与市场(Mendix与 OutSystems)

    低代码技术与市场(Mendix与 OutSystems) 本文主要参考文章 参考链接 https://mp.weixin.qq.com/s/OXCBORheAx99o3fS-ZfUdg https:/ ...

  4. 无代码的时代真的来了吗?

    所谓"无代码",并不是不存在代码,无代码平台的开发,给开发者更大的挑战.更多 机会.所以,"无代码"不是解放程序员,而是给程序员提出了更高的要求.带来更大的挑战 ...

  5. 如何使用人工智能发展业务并创造企业价值

    如何使用人工智能发展业务并创造企业价值 如今,很多企业使用人工智能来发展他们的业务,帮助企业成长,提高生产力和收入,同时创造企业价值. 作者::Nick Ismail 来源:企业网D1Net|2020 ...

  6. 做 AI 大咖在顶级单位之间随兴漂移,好开心!

    谷歌 AI 中国中心彻底变天了! https://mp.weixin.qq.com/s/I0P3mizPV5nf-E59w-QYrA 刚刚,CSDN(ID:CSDNNews)向谷歌中国求证,确认谷歌 ...

  7. Appium之Hybrid APP混合应用测试

    目录 前言 1. 解决方案 2. 遇到的问题 2.1 contexts只能获取NATIVE_APP,无法获取WEBVIEW 2.2 已经能够获取到WEBVIEW,但是无法切换到WEBVIEW 前言 在 ...

  8. 全球及中国认知文档处理行业运营策略与应用前景分析报告2022版

    全球及中国认知文档处理行业运营策略与应用前景分析报告2022版 --------------------------------------- [修订日期]:2021年12月 [搜索鸿晟信合研究院查看 ...

  9. 一段人人都应该知道的从Vue到React的过渡史

    写在前面 以前写Vue写惯了,心血来潮,写起了react.并根据Vue官网文档的语法顺序,写了对应的React的语法,并附一个教程demo. 教程的github地址:Close2React 项目使用框 ...

最新文章

  1. java8 无符号_Java8包装类 新增 无符号运算方法
  2. 中缀表达式计算、后缀表达式计算、中缀转后缀
  3. QT的QItemSelection类的使用
  4. 前端学习(2947):node.js使用
  5. python爬虫模拟登录人人网
  6. cogs577. 蝗灾(CDQ)
  7. glDrawArrays,glDrawElements用法
  8. 李宏毅机器学习2021】机器学习模型的可解释性 (Explainable ML)
  9. 【微软小冰】多轮和情感机器人的先行者
  10. nupkg格式_nupkg文件怎么打开(package程序安装)
  11. BT.1120协议简介
  12. CAXA中添加气动液压元件库方法
  13. 【新闻推荐系统】(task3)Scrapy基础及新闻爬取实战
  14. 打印表格留标题怎么设置_WPS怎么设置打印表格每页都有标题?
  15. .net\C#基于zxing的彩色、Logo二维码生成---随笔
  16. 破解压缩包密码-两行命令
  17. HP暗影精灵7笔记本OMEN16.1inch Gaming Laptop PC16-b0000原装出厂Win11系统恢复原厂OEM系统
  18. BitLocker解锁之后加锁
  19. postgresql立式版本下载_PostgreSQL下载_PostgreSQL最新官方版下载_3DM单机
  20. 在VC中用GDI+绘制角度可变的颜色渐变效果-.NET教程,VB.Net语言[转]

热门文章

  1. 【英语学习】【Level 08】U02 Movie Time L3 Now showing
  2. oracle监听管理工具,oracle监听器管理
  3. 在Unity 3D中,shader是何时编译的,在何时加载入显存中的?
  4. 10.28T5 tarjan+dfs
  5. 以我的视角看java编程世界
  6. Canvas or SVG?一张好图,两手准备,就在 ECharts 4.0
  7. Halcon算子翻译——dev_close_inspect_ctrl
  8. 日立数据系统进一步加强与IBM zHPF大型机合作
  9. 罗森伯格荣获2015年度中国数据中心优秀供应商与中国十大布线品牌两项大奖
  10. gem install 和 bundle 区别