最近用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. HDU-4035-概率dp-期望-公式化简

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submis ...

  2. 利用Bomb打造自己的小程序

    小程序开发 Bomb免费后端云开发 首先,小程序的开发已是热门,一个前段技术人员必备的技术就是开发小程序.在这里推荐一个入门小程序文章(连胜出品). 对于小程序的入门开发就不再做详细介绍,这里针对Bm ...

  3. 005PHP文件处理——目录操作,统计大小 filesize unlink

    <?php /* 目录操作,统计大小 filesize unlink * */ $dir = dir("."); while (($file = $dir->read( ...

  4. L181 The microscopic structure of a cat’s tongue helps keep its fur clean

    T.S. eliot's mystery cat, Macavity, besides being a criminal mastermind able to evade the combined r ...

  5. HTML, CSS. JS的各种奇淫技巧

    1. js 中为了省字节,性能, 防止被重写等发明了各种写法,记录下 //取整 parseInt(a,10); //Before Math.floor(a); //Before a>>0; ...

  6. WinForm获取当前路径汇总

    Winform获取应用程序的当前路径的方法集合汇总,值得收藏备用 具体如下, //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembl ...

  7. 【.NET】AutoMapper学习记录

    在两个不同的类型对象之间传输数据,通常我们会用DTOs(数据传输对象),AutoMapper就是将一个对象自动转换为另一个对象的技术 背景 一些orm框架,在用到Entity的时候有一些开源代码用到了 ...

  8. QLoo graphql engine 学习三 架构

    一张官方的参考图 说明 Storage Layer API 参考了kubernetes 的设计 qloo 组成 qloo 有qloo 服务以及envoy proxy 组合而成,envoy proxy ...

  9. Dictionary字典类介绍

    说明     必须包含名空间System.Collection.Generic      Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)      键必须是唯一的,而值不 ...

  10. 【转】Linux shell的&&和||

    原文网址:http://www.2cto.com/os/201302/189655.html Linux shell的&&和||   shell 在执行某个命令的时候,会返回一个返回值 ...