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

启动文件 /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 catch
    var 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;
时间: 2024-08-02 15:37:06

【HAVENT原创】Node Express API 通用配置的相关文章

Webpact打包React后端Node+Express

Webpact打包React后端Node+Express 前言 React官方推荐用Browserify或者Webpack 来开发React组件. Webpack 是什么?是德国开发者 Tobias Koppers 开发的模块加载器.Instagram 工程师认为这个方案很棒, 似乎还把作者招过去了.在 Webpack 当中, 所有的资源都被当作是模块, js, css, 图片等等..Webpack 都有对应的模块 loader,如下文中将用到jsx-loader来加载带react语法的js文件

node+express+mongodb初体验

从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整个学习思路,以下是我的学习分享,是入门级学习体验适合node+mongodb开发小白,node已玩过很久的大神这篇文章可能不适合. 开篇来个例子: 客户端表单页面: <!DOCTYPE HTML> <html lang="en-US"> <head> &

node Express 创建一个web应用

环境安装的node版本是最新的,下个月会发布4.0,把io.js合并进来. [[email protected] myExpressApp]$ node --version v0.12.7 npm和node版本中的npm版本更新是不同布的,我们要经常更新npm包, [[email protected] ~]$ npm install --g npm /home/doctor/opt/node/bin/npm -> /home/doctor/opt/node/lib/node_modules/np

Vue Element+Node.js开发企业通用管理后台系统

第1章 课程介绍介绍项目背景.达到的目标.技术栈和功能演示 第2章 课程分析课程分析 第3章 Vue进阶(上)对Vue的进阶知识进行讲解,包括$emit和$on.directive指令.组件化.Vue插件等相关内容. 第4章 Vue进阶(下)对Vue的进阶知识进行讲解,包括组件通信.过滤器.监听器.Vue2.6重要新特性等相关内容. 第5章 Element-UI入门对Element-UI的内容进行讲解,包括如何搭建Element-UI使用环境,如何使用插件快速集成Element-UI,并通过el

Node+Express+node-mysql 实战于演习 全套mysql(增删改查)

最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node 首先 本实例展示的是基于Node+Express+node-mysql快速搭建的一套增删改查,视图模板是jade,基本上都是现在能用的到的技术,市面上的实例也特别少,有用的又不新,所以自己写一个 基本工作 首先我们准备一些基本的,因为我是用mysql麻烦可以自己装一下mysql,去官网可以下各种操作系统的安装包. 实例就一张表,下面是这张表的建表语句 S

Node.js安装与配置 -- 收录

Node.js安装与配置 Node.js已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对0.4.x版本而言的,并非适合最新的0.6.x的版本情况了,对此,我们将在0.6.x的版本上介绍Node.js的安装和配置.(本文一律以0.6.1为例,0.6的其余版本,只需替换版本号即可.从http://nodejs.org/#download可以查看到最新的二进制版本和源代码). Windows平台下的Node.js安装 在过去,Node.js一直不支持在Windows平台下原生编

零基础实现node+express个性化聊天室

本篇文章使用node+express+jquery写一个个性化聊天室,一起来get一下~(源码地址见文章末尾) 效果图 项目结构 实现功能 登录检测 系统自动提示用户状态(进入/离开) 显示在线用户 支持发送和接收消息 自定义字体颜色 支持发送表情 支持发送图片 下面将一一讲解如何实现 前期准备 node及npm环境.express.socket.io 具体实现 1.将聊天室部署到服务器 先用node搭建一个服务器,部署在localhost:3000端口,先尝试向浏览器发送一个"hello wo

运用 node + express + http-proxy-middleware 实现前端代理跨域的 详细实例哦

一.你需要准备的知识储备 运用node的包管理工具npm 安装插件.中间件的基本知识: 2.express框架的一些基础知识,知道如何建立一个小的服务器:晓得如何快速的搭建一个express框架小应用: 3.还需要一些前端的基础小知识,html\css\js\jquery 4.最重要的一点就是知道怎么产生的跨域,要是不知道怎么产生的跨域,如何知道需要去破解它呢? 二.实例的代码分析 场景分析,我本地的域名为<http.localhost:8080>,我要请求的地址是<http.****.

使用node+express+mongodb实现用户注册、登录和验证功能

无论是手机端还是pc端,几乎都包含登录注册方面功能,今天就使用node+express+mongodb实现一套登录注册功能,这里需要自己去安装MongoDB环境,如果没有安装可以看这篇关于MongoDB安装的步https://www.cnblogs.com/zhoulifeng/p/9429597.html 实现功能 注册 密码加密 登录 校验 token处理 1.环境搭建运行 在目录里安装express和mongoose,并在根目录创建server.js文件和models文件, 在server