qn-lcdp
Version:
青能科技低代码前端
83 lines (68 loc) • 1.99 kB
JavaScript
/**
* http 静态文件服务器创建方法
*/
const express = require('express')
const opn = require('opn')
const bodyParser = require('body-parser')
const utils = require('../utils')
/**
* 设置通用响应头
* @param req
* @param res
*/
function setHeaders(req, res) {
res.set({
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Origin': req.get('Origin') || '*',
'Access-Control-Allow-Methods': 'GET,POST,DELETE,PUSH,PATCH,OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE'
})
}
/**
* 创建服务器函数
* @param {Object} options 参数选项
* @param {number} options.port 服务启动端口号
* @param {string} options.root 文件系统根目录路径
* @param {string} options.path 浏览器打开后访问目录路径
* @param {boolean} options.open 是否自动打开浏览器
* @param {object[]} routes 路由配置 {path, type, handler}
* @return {{app, server}}
*/
function createHttpServer({port, root, path, routes, open}) {
const app = express()
// 设置静态目录
if (root) {
app.use('/', express.static(root))
}
// 参数转换成json格式
app.use(bodyParser.json())
// 通用响应头设置
app.use(function (req, res, next) {
setHeaders(req, res)
next()
})
routes = routes || []
// 设置接口路由
routes.forEach(({path, type, handler}) => {
app[type || 'get'](path, handler)
})
// 处理跨域
app.options('/*', (req, res) => {
res.send(null)
})
// 启动http服务
const server = app.listen(port, function (err) {
if (err) utils.log(err, 'error')
const port = server.address().port
const host = `http://127.0.0.1:${port}`
const url = host + utils.join('/', path || '')
utils.log(`http server listening at ${host}`, 'success')
// 打开浏览器
opn && opn(url)
})
return {
app,
server
}
}
module.exports = createHttpServer