之前工作中由于工作量问题,有时候需要等后台的同事写好接口才能联调。最近看了包建强老师的自己搭建服务器模拟数据的方法,忽然感觉发现新大陆一样,之前刚学了一些NodeJS的皮毛,想的自己搭建一个服务器。就是干!
所需要的环境
- NodeJS
这里就不介绍怎么安装NodeJS了。 - Express (Express中文网)
官方介绍说,Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
搭建Express服务器
参考Express官网的文档就能轻轻松松的搭建,步骤如下:
前提:
已安装好Node.js,使用node -v 查看node的版本
Express安装
- Step1: 新建一个项目文件夹
mkdir server
cd server
- Step2: 使用npm初始化这个文件夹为Node环境的,初始化以后会生成一个package.json的文件
npm init
- Step3: 安装Express框架
Express分为全局环境和临时环境两种方式
全局环境
npm install express --save
临时环境
npm install express
Express框架搭建
前提: Express框架安装完成。
直接下面的命令,让当前的文件夹用于express框架的文件结构
cd server
express
初始化以后安装依赖
npm install
待安装完成后就安装完了express的文件和依赖会在server文件夹下生成如下文件
.
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade
文件配置,实现接口
这里我们要看一下app.js,/routes/index.js, /routes/users.js 这几个文件。
app.js
这里主要看
//设置接口的路径和数据
var index = require('./routes/index');
var users = require('./routes/users');
//设置接口的路径和数据
app.use('/', index);
app.use('/users', users);
上面两行代码是引入/routes/index.js和/routes/users.js两个文件,而这两个文件中配置这我们需要的json数据。
下面两行代码是我们访问json数据要用到的路径。我们可以配合和后台同事一样的路径,方便后期联调。
/routes/users.js
index.js和users.js的性质一样,这里以users.js讲解。
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
var json='{"accountid":"","data":{"picurl":"https://b-ssl.duitang.com/uploads/item/201409/07/20140907232842_SEJCX.jpeg","url":"http://www.jianshu.com"},"errorCode":"0000","msg":"","token":""}';
res.send(json);
});
/* 获取新闻列表*/
router.get('/getnews', function(req, res, next) {
connection.query(
'SELECT * FROM `news`',
function(err,rows){
res.json(rows);
}
);
});
/*获取要修改的news*/
router.get('/curnews',function(req,res){
var newsid=req.query.newsid;
connection.query(
'SELECT * FROM `news` WHERE id=?',
[newsid],
function(err,rows,fileds){
res.json(rows);
}
);
});
/*删除新闻*/
router.post('/delnews',function(req,res){
var newsid=req.body.newsid;
connection.query(
'DELETE FROM `news` WHERE `id`=?',
[newsid],
function(err,result){
console.log(result.affectedRows);
res.json(result);
}
);
});
/*修改新闻*/
router.post('/update',function(req,res){
var newsid=req.body.newsid;
var newstitle=req.body.newstitle;
var newstype=req.body.newstype;
var newsimg=req.body.newsimg;
var newstime=req.body.newstime;
var newssrc=req.body.newssrc;
connection.query(
'UPDATE `news` SET `newstype`=?,`newstitle`=?,`newsimg`=?,`newstime`=?,`newssrc`=? WHERE `id`=?',
[xss(newstype),xss(newstitle),xss(newsimg),xss(newstime),xss(newssrc),newsid],
function(err,rows){
console.log("rows-------------"+rows);
res.json(rows.changedRows);
}
);
});
/*添加新闻*/
router.post('/insert',function(req,res){
var newstitle=req.body.newstitle;
var newstype=req.body.newstype;
var newsimg=req.body.newsimg;
var newstime=req.body.newstime;
var newssrc=req.body.newssrc;
connection.query(
'INSERT INTO `news` (`newstype`,`newstitle`,`newsimg`,`newstime`,`newssrc`) VALUES (?,?,?,?,?)',
[xss(newstype),xss(newstitle),xss(newsimg),xss(newstime),xss(newssrc)],
function(err,result){
if(!err){
console.log(result.insertId);
res.json(result)
}
}
);
});
module.exports = router;
这里需要注意的是
- 如果使用POST提交数据,那么要使用req.body.*的参数获取字段;
- 如果使用GET的方式获取数据,那么使用req.query.*的方式获取参数字段;
启动server,获取接口数据,在默认器数据127.0.0.1:3000查看允许的效果。
cd server
npm install