最近用express搭建了一个简单的RESTful风格的API服务,数据库使用mysql,主要用于获取数据库数据,模糊搜索等。

需要用到的模块:

  • express:这个都很熟悉了;
  • body-parser:express中间件,用来解析req.body;
  • mysql:用于连接mysql数据库;
1. express启动文件,prod.server.js:
const express = require('express');
const server = require('./mysqlServer'); let port = process.env.PORT || config.build.port; const app = express(); let router = express.Router(); router.get('/', (req, res, next) => {
req.url = '/index.html';
next();
}); app.use(router); let apiRoutes = express.Router(); apiRoutes.get('/test', (req, res) => {
server.getData('test', function(errCode, data){
res.json({
status: errCode,
data: data
});
});
});
apiRoutes.post('/search', function(req, res) {
// console.log(req.body);
server.doSearch(req.body.searchStr, function(errCode, data){
res.json({
status: errCode,
data: data
});
});
}); app.use('/api', apiRoutes); app.use(express.static('./dist')); module.exports = app.listen(port, function (err) {
if (err) {
console.log(err);
return
}
console.log('Listening at http://localhost:' + port + '\n');
});
2. 连接数据库,mysqlServer.js:
const mysql = require('mysql');

const DBConfig = {
host: 'localhost',
port: '3306',
user: 'name',
password: 'pwd',
database: '数据库名'
}; exports.getData = function(type, callback) {
...
};
exports.doSearch = function(str, callback) { let connection = mysql.createConnection(DBConfig);
connection.connect(); let sql = "SELECT * FROM xxx WHERE name LIKE '%" + str + "%'";
// console.log(sql);
connection.query(sql, function(err, result){
if(err) {
console.log('[ERROR SQL] : ', sql);
console.log('[SEARCH ERROR] - ', err.message);
callback(0,[]);
}
let resultJson = JSON.parse(JSON.stringify(result));
callback(1,resultJson);
}); connection.end();
};
3. 需要注意的是

这里如果就按照我上面这种写法,应该是获取不到POST请求的body的,因为express 4.x官网也说了:

Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer.

这个意思是提交请求的req.body中的键值对,express接收过来默认是undefined,需要借助中间件来做解析处理,于是便需要用到body-parser

const bodyParser = require('body-parser');

app.use(bodyParser.json()); //for parsing application/json
app.use(bodyParser.urlencoded({ extended: true})); //for parsing application/x-www-form-urlencoded
4. body-parser应用场景

body-parser这两种用法基本覆盖了所有的应用场景,后定义的不会覆盖先定义的,经解析后获取到的都是json格式的对象,刚开始我没写 app.use(bodyParser.urlencoded({ extended: true})); 这一句,req.body可以获取到但是为空对象,这是因为前端提交的默认数据格式是Content-Type:application/x-www-form-urlencoded; charset=UTF-8,因此还需要做进一步解析。

到现在为止,就可以正常调用这个API服务了。

node express+mysql搭建简易API服务—body-parser中间件的更多相关文章

  1. 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

    本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...

  2. 从无到有,用Nodejs+express+mongodb搭建简易登陆系统

    前端处理server表示很蛋疼,初学Node,虽然感觉异常强大,但是学起来还是有些吃力的,Node是工具,它不是万能的,搭建一个系统还是需要借助其他一些工具,对于我这个没怎么接触server的前端来说 ...

  3. 使用CodeIgniter框架搭建RESTful API服务

    使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12   |   分类于 翻译笔记   |   6条评论 在2011年8月的时候,我写了一篇博客<使用Cod ...

  4. Node + Express + Mysql的CMS小结

    因为之前用过上述的组合完成过很多系统,而这一次是为了实现一个帮助系统的静态网页发布.因为很久不写,重点说遇到的几个坑: 1.库版本的问题 比如mysql连接数据库一直报错,因为系统重装过,所以重新安装 ...

  5. node+express+mysql 实现登陆注册

    基于 node.express.mysql 实现的登录注册. 1.`首先在终端中 安装 node .` 2.`通过npm install express -g 命令全局安装 express`. 3.` ...

  6. Go实战--通过gin-gonic框架搭建restful api服务(github.com/gin-gonic/gin)

    生命不止,继续 go go go !!! 先插播一条广告,给你坚持学习golang的理由: <2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言> 言归正传! 之前写过使用g ...

  7. 一个 "开箱即用" 个人博客全栈系统项目!vue+node+express+mysql+sequlize+uniapp

    " MG'Blog " 一个 "开箱即用" 个人博客全栈系统项目! 探索本项目的源码 » 前台预览 · 管理端预览 v1.0.2 小程序预览 v1.0.2 介绍 ...

  8. node+express+mysql实现简单的数据增删改查

    前提 电脑已经安装了node,express,mysql. 实现步骤 1.新建数据库表 附数据表结构: 2.创建exprss项目 express -e myapp  新建一个以ejs为模板的expre ...

  9. 【原创】node+express+socket搭建一个实时推送应用

    技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...

随机推荐

  1. gzip压缩初探

    前言 我们平时工作中传文件时为了提高传输速度一般都会把文件压缩一下再传,那样速度回快一些,尤其是那些文件很多的文件夹,比较常用的压缩格式就是zip,rar了.那我们日常网页中利用http协议请求的那些 ...

  2. 如何判断SSD盘

    1.判断cat /sys/block/*/queue/rotational的返回值.如果返回1则表示磁盘可旋转,可以判断是HDD:反之,如果返回0,则表示磁盘不可以旋转,就有可能是SSD. 注意:/s ...

  3. java 注解总结

    @Controller用于标注控制层组件 @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象.分发处理器将会扫描使用了该注解的类的方法.通 ...

  4. 控制led灯并显示自己的数值

    前提是有led.jar包封装好了东西 1.并设置好led灯的模式并打开串口. 2.在布局中创建一个EditText ,Button.并利用-.getText.toString().trim(); 来获 ...

  5. 利用U盘大白菜软件来重装win7系统

    个人装win7系统用了两个U盘,一个做启动盘(FAT32格式),另外一个当做系统盘(NTFS格式). 首先在电脑里面下载一个大白菜软件,并且安装好,打开软件,插上U盘,检测到了该U盘即可一键制作启动盘 ...

  6. POJ 1611:The Suspects(并查集)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 48327   Accepted: 23122 De ...

  7. HTML第一课——基础知识普及【1】

    请关注公众号:自动化测试实战 HTML概念及编写规范 html叫做超本文标记语言,注意它知识标记语言,不是编程语言. 编写规范: 由标记(html, div, p, h1等)组成 标记成对出现(< ...

  8. flask第二十七篇——九九乘法表

    请关注公众号:自动化测试实战 九九乘法表其实很容易: <table border="1"> <tbody> {% for x in range(1, 10) ...

  9. 【消息队列值Beanstalk】beeanstalk初识

    Beanstalk是一个高性能.轻量级的.分布式的.内存型的消息队列系统.最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟.其实Beanstalkd是典型的类Mem ...

  10. CH2101 可达性统计

    题意 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. 分析 有向无环图,可以按拓扑序逆序统计答案.可以用bitset维护可达性. 时间复杂度\(O(N ...