为什么80%的码农都做不了架构师?>>>   

( 基于 Express 4.x )

启动文件 /app.js:

var express = require('express');
var bodyParser = require('body-parser');
var proxy = require('http-proxy-middleware');
var path = require('path');var index = require('./routes/index');
var data = require('./routes/data');var app = express();/* 设置静态目录 */
app.use(express.static('src'));/* 启用反向代理 */
var options = {target: 'http://localhost:8080/h5', // 目标主机changeOrigin: true,//secure: false,// ws: true,// pathRewrite: {//     '^/api' : '/h5/api'// }
};
var apiProxy = proxy(options);  // 开启代理功能,并加载配置
app.use('/api', apiProxy);      // 对地址为’/‘的请求全部转发// Node Express API 路由配置
app.use('/', index);
app.use('/data', data);// // catch 404 and forward to error handler
// app.use(function(req, res, next) {
//     var err = new Error('Not Found');
//     err.status = 404;
//     next(err);
// });// // error handler
// app.use(function(err, req, res, next) {
//     // set locals, only providing error in development
//     res.locals.message = err.message;
//     res.locals.error = req.app.get('env') === 'development' ? err : {};
//
//     // render the error page
//     res.status(err.status || 500);
//     res.render('error');
// });/* json 输出支持, 启动服务 */
app.use(bodyParser.json());
app.listen(7788);var url = "http://localhost:7788";
console.log('listen: ' + url);/* 启动浏览器访问站点 */
var child_process = require("child_process");
var cmd = 'start ' + url;if(process.platform == 'linux'){cmd  = 'xdg-open ';
}else if(process.platform == 'darwin'){cmd  = 'open ';
}
// else{ // process.platform == 'win32'
//     cmd  = 'start "%ProgramFiles%\Internet Explorer\iexplore.exe"';
// }child_process.exec(cmd + ' "'+url + '"');
//child_process.exec(cmd + url);

路由配置 /routes/index.js

var express = require('express');
var router = express.Router();/* GET home page data. */
router.get('/', function(req, res, next) {res.send({ title: '首页' });
});router.get('/login', function(req, res, next) {res.send({ title: '登录' });
});module.exports = router;

路由配置 /routes/data.js

var express = require('express');
var router = express.Router();
var fs = require('fs');
var PATH = './public/data/';//读取数据模块,供客户端调用
//查询接口,token校验
//公共接口,无需校验
//data/read?type=it
//data/read?type=it.json
router.get('/read', function(req, res, next) {var type = req.param('type') || "";fs.readFile(PATH + type + '.json', function (err, data){if(err){return res.send({success: false,message: '读取文件异常'});}var COUNT = 50;// TODO: try{}catch(){}var obj =[];try{obj = JSON.parse(data.toString());}catch(e){obj = [];}if(obj.length > COUNT){obj = obj.slice(0, COUNT);}return res.send({success: true,data:obj});});
});// 数据存储模块——后台开发使用
router.post('/write',function(req, res, next){if(!req.cookies.user){return res.render('login',{});}// 文件名var type = req.param('type') || "";// 关键字段var url = req.param('url') || '';var title = req.param('title') || '';var img = req.param('img') || '';if(!type || !url || !title || !img){return res.send({success: false,message:'提交的字段不全'});}//1)读取文件var filePath = PATH + type + '.json';fs.readFile(filePath, function(err, data){if(err){return res.send({success: false,message: '读取数据失败'});}var arr = JSON.parse(data.toString());//代表每一条记录var obj = {img: img,url: url,title: title,id: guidGenerate(),time: new Date()};arr.splice(0, 0, obj);//2)写入文件var newData = JSON.stringify(arr);fs.writeFile(filePath, newData, function(err){if(err){return res.send({status:0,info: '写入文件失败'});}return res.send({success: true,message: obj});});});
});//阅读模块写入接口 后台开发使用
router.post('/write_config', function(req, res, next){if(!req.cookies.user){return res.render('login',{});}//TODO:后期进行提交数据的验证//防xss攻击 xss// npm install xss// require('xss')// var str = xss(name);var data = req.body.data;//TODO : try catchvar obj = JSON.parse(data);var newData = JSON.stringify(obj);// 写入fs.writeFile(PATH + 'config.json',newData, function(err, data){if(err){return res.send({success: false,message: '写入数据失败'});}return res.send({success: true,message:'数据写入成功',data:newData})})
});//登录接口
router.post('/login', function(req, res, next){//用户名、密码、验证码var username = req.body.username;var password = req.body.password;//TODO :对用户名、密码进行校验//xss处理、判空//密码加密 md5(md5(password + '随机字符串'))//密码需要加密-> 可以写入JSON文件if(username === 'admin' && password === '123456'){res.cookie('user',username);return res.send({success: true});}return res.send({success: false,message: '登录失败'});
});// guid
function guidGenerate() {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {var r = Math.random() * 16 | 0,v = c == 'x' ? r : (r & 0x3 | 0x8);return v.toString(16);}).toUpperCase();
}module.exports = router;

转载于:https://my.oschina.net/u/943746/blog/1826484

【HAVENT原创】Node Express API 通用配置相关推荐

  1. node + express + mongodb 手动配置

    首先创建一个文件夹,在文件夹中创建一个以js为后缀的主文件列如app.js 下载express框架和mongoose模块用来操作mongodb数据库 npm i express --save npm ...

  2. 基于 Node.js + Koa 构建完整的 Web API (配置 ESLint 和使用 Airbnb 编码规范)

    主题内容:基于 Node.js + Koa 构建完整的 Web API (配置 ESLint 和使用 Airbnb 代码规范) 背景描述:上一篇 基于 Node.js + Koa 构建完整的 Web ...

  3. APICACHE : Express/Node的API响应缓存中间件

    APICACHE : Express/Node的API响应缓存中间件 翻译来源:https://gitee.com/yunwisdoms/apicache 支持Redis或具有自动清除功能的内置内存引 ...

  4. 网站开发(一)Node.Js 安装和配置及express配置

    目录 @[TOC](目录) 一.Node.js的下载和安装 1 下载 2 安装 3 检查是否安装成功 二.环境配置 1 node和npm环境配置 2 配置全局模块的存放路径以及cache的路径 三.安 ...

  5. node+express+mongodb初体验

    从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整 ...

  6. node+express+http-proxy-middleware代理转发

    node+express+http-proxy-middleware代理转发 @(node代理转发)[http-proxy|node实现前后端分离|] 文章,欢迎进入我的博客:www.jaxqin.c ...

  7. Node.js安装与配置-->Windows

    前言 Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型, [1] 让JavaScri ...

  8. 如何使create-react-app与Node Back-end API一起使用

    This is a very common question among newer React developers, and one question I had when I was start ...

  9. Elasticsearch Java Low Level REST Client(通用配置)

    Elasticsearch Java Low Level REST Client(通用配置) 通用配置 正如初始化中所解释的,RestClientBuilder支持提供RequestConfigCal ...

最新文章

  1. 8636 跳格子(dfs+记忆化搜索)
  2. 节点的度与网络稀疏性
  3. boost::container模块实现全部分配的测试程序
  4. Math源码java_深入学习java源码之Math.sin()与 Math.sqrt()
  5. leetcode22. 括号生成
  6. (淘宝无限适配)手机端rem布局详解(转载非原创)
  7. AJAX最大的特点以及作用是什么?经典面试题
  8. arcgis 合并名字相同的要素_【转】ArcGIS中各种合并要素(Union、Merge、Append、Dissolve)的异同点分析...
  9. 编程之美(The beauty of programming)
  10. SAVIOR Securing Autonomous Vehicles with Robust Physical Invariants 论文报告
  11. 小米手机连上无线网却无法上网络连接服务器,连接水星路由器wifi成功但上不了网怎么办?...
  12. python中如何显示特殊的单位符号
  13. 个人支付免费开通支付宝付款功能(免费签约)支付宝当面付开通集成到网站教程
  14. java 飞机 源码_Java 飞机游戏源码(带音乐)
  15. java 首字母检索_java实现首字母模糊查询的功能
  16. 微信小程序,物流助手对接(中通篇)待续
  17. 双卡手机管理短信通知 | 屏蔽短信通知
  18. 乐视:基于Docker的RDS,我们是这样做的
  19. 微信公众号及CSDN文章爬取
  20. 装系统时无法创建新的分区

热门文章

  1. 请问染色浴比对染色性能有影响吗?浴比对染色的哪些性能有影响?染色亲和力测定有哪些实际应用意义
  2. linux 线程学习初步01
  3. 【c】写头文件要加#ifndef,#define, #endif
  4. C/S、B/S的区别
  5. 【Linux系统编程学习】 文件描述符
  6. 蓝桥杯物联网例程下载
  7. Python3正则表达式
  8. 【面试宝典 | 01】面经
  9. 106. 从中序与后序遍历序列构造二叉树
  10. 探索 Java 隐藏的开销