HAVENT原创Node Express API 通用配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

以上是关于HAVENT原创Node Express API 通用配置的主要内容,如果未能解决你的问题,请参考以下文章

HAVENT原创Australian Business Number (ABN) 验证

HAVENT原创Salesforce 给字段加上链接

HAVENT原创修改 CentOS 服务器名称

HAVENT原创centOS 下 nginx 配置和启动

原创node+express+socket搭建一个实时推送应用

[原创]Linux(CentOS)下安装nodejs+express