【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.pswp.cn/news/390293.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390293.shtml
英文地址,請注明出處:http://en.pswp.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 越前…