【HAVENT原创】Node Express API 通用配置

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

( 基于 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#使用Json.NET解析Json

本文转载自 http://xiaosheng.me/2016/10/01/article25/ 最近在 C# 项目中需要使用到 Json 格式的数据,我简单上网搜索了一下,基本上有两种操作 Json 数据的方法: 使用 Windows 系统自带的类使用第三方的包本着“第三方包一定有比系统自带类优…

现在JavaScript日期–如何在JavaScript中获取当前日期

Many applications you build will have some sort of a date component, whether its the creation date of a resource, or the timestamp of an activity. 您构建的许多应用程序都将具有某种日期组件,无论是资源的创建日期还是活动的时间戳。 Dealing with date…

233. 数字 1 的个数

给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。 示例 1: 输入:n 13 输出:6 示例 2: 输入:n 0 输出:0 解题思路 正确性证明 例如:对于n3015&#xff0c…

Linux串口设置参数

为什么80%的码农都做不了架构师?>>> 在Linux环境下,串口名从ttyS0开始依次是ttyS1、ttyS2等。在本程序中,使用ttyS0作为通信串口。在打开ttyS0的时候选项 O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信…

STM32F013 十元板

我大拇指般大小。STM32F103C8T6,64K Flash,20K RAM,m3的核。十元,应该是价格极限了吧。 通过USB供电(5V),也可以排针3.3V供电。可惜没有引出5V排针。USB口可以供电和USB通讯,没有USB…

如何在Python中建立和训练K最近邻和K-Means集群ML模型

One of machine learnings most popular applications is in solving classification problems.机器学习最流行的应用之一是解决分类问题。 Classification problems are situations where you have a data set, and you want to classify observations from that data set in…

552. 学生出勤记录 II

552. 学生出勤记录 II 可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符: ‘A’:Absent,缺勤 ‘L’:Late,迟…

C/C++中计算函数运行时间

#include<stdio.h> #include<time.h> clock_t start,stop;//clock_t 是clock&#xff08;&#xff09;函数返回变量的类型 double duration;//记录被测函数的运行时间&#xff0c;以秒为单位 int main() { startclock();//开始计时 MyFunction();//把被测函数加在这…

作为一名前端开发工程师,你必须掌握的WEB模板引擎:Handlebars

为什么需要使用模板引擎&#xff1f; 关于为什么要使用模板引擎&#xff0c;按照我常说的一句话就是&#xff1a;不用重复造轮子了。 简单来说&#xff0c;模板最本质的作用是“变静为动”&#xff0c;一切利于这方面的都是优势&#xff0c;不利于的都是劣势。要想很好地实现“…

extjs 实用开发指南_如何提出有效问题:针对开发人员的实用指南

extjs 实用开发指南Learning is a journey that never ends. At every point in your career, you will keep learning, re-learning, and un-learning. 学习是一个永无止境的旅程。 在职业生涯的每个阶段&#xff0c;您都会不断学习&#xff0c;重新学习和不学习。 The abil…

LOJ 6270

最近&#xff08;一直&#xff09;有点&#xff08;很&#xff09;蠢 按照区间大小排序做区间包含多少区间的话 只用考虑 左端点比当前左端点小的和右端点比当前右端点大的&#xff0c;因为不可能同时满足 关于K&#xff0c;就在做到K的时候减一下就好了&#xff0c;一直傻逼在…

Zabbix3.4安装详细步骤

Zabbix3.4安装的详细步骤一、zabbix介绍现在大多数公司都会用到监控软件&#xff0c;主流的监控软件就是Zabbix了&#xff0c;当然还会有Nagios等其他的软件&#xff1a;zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种…

软件自学成才到公司要学历吗_作为一名自学成才的移动开发人员,我在旅途中学到了什么

软件自学成才到公司要学历吗In this post, Ill share my entire journey about how I became a professional mobile developer.在这篇文章中&#xff0c;我将分享我如何成为一名专业的移动开发人员的整个过程。 I hope that reading about my experience will help you refle…

cs231n---语义分割 物体定位 物体检测 物体分割

1 语义分割 语义分割是对图像中每个像素作分类&#xff0c;不区分物体&#xff0c;只关心像素。如下&#xff1a; &#xff08;1&#xff09;完全的卷积网络架构 处理语义分割问题可以使用下面的模型&#xff1a; 其中我们经过多个卷积层处理&#xff0c;最终输出体的维度是C*H…

http协议内容

前言&#xff1a; http协议&#xff1a; 对浏览器客户端 和 服务器端 之间数据传输的格式规范http1.0&#xff1a;当前浏览器客户端与服务器端建立连接之后&#xff0c; 只能发送一次请求&#xff0c;一次请求之后连接关闭。 http1.1&#xff1a;当前浏览器客户端与服务器端建…

array_combine()

转载于:https://www.cnblogs.com/xiaobiaomei/p/8392728.html

CSS外边距(margin)重叠及防止方法

#css外边距margin重叠及防止方法CSS外边距(margin)重叠及防止方法 #1-什么是外边距margin重叠1. 什么是外边距(margin)重叠 外边距重叠是指两个或多个盒子(可能相邻也可能嵌套)的相邻边界(其间没有任何非空内容、补白、边框)重合在一起而形成一个单一边界。 #2-相邻marign重叠的…

composer windows安装

一.前期准备: 1.下载安装包,https://getcomposer.org/download/ 2.在php.ini文档中打开extensionphp_openssl.dll 3.下载php_ssh2.dll、php_ssh2.pdb,http://windows.php.net/downloads/pecl/releases/ssh2/0.12/ 4.把php_ssh2.dll、php_ssh2.pdb文件放php的ext文件夹 5.重启ap…

spring整合mybatis采坑

本来这个错误是整合spring和mybatis遇到的错误&#xff0c;但是一直没有解决&#xff0c;但是在做SpringMVC时也了出现了这样的错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name sqlSessionFactory defined in class path resourc…

处理测试环境硬盘爆满

测试环境经常会收到这类告警 第一步 登陆机器查看硬盘使用 执行df 好吧,使用情况真不妙,根目录占用过大 第二步 确定哪个文件太大或者文件过多 进入爆满的目录,如这里是根目录 cd / 然后找下面哪个文件夹或者文件太大,有几种方式: 1.dusudo du -h --max-depth1 | sort -hr 越前…