datamax-cli
Version:
datamax plugin cli
92 lines (76 loc) • 3.1 kB
JavaScript
const Koa = require("koa");
const app = new Koa();
const router = require("koa-router")();
const views = require("koa-views");
const co = require("co");
const convert = require("koa-convert");
const json = require("koa-json");
const onerror = require("koa-onerror");
const bodyparser = require("koa-bodyparser")();
const logger = require("koa-logger");
const htmlRender = require("koa-html-render"); // 引入koa-html-render
const index = require("./routes/index");
// middlewares
app.use(convert(bodyparser));
app.use(convert(json()));
app.use(convert(logger()));
app.use(convert(require("koa-static")(__dirname + "/public")));
app.use(convert(require("koa-static")(__dirname + "/pages")));
app.use(convert(htmlRender())); // 这里默认 static文件夹是存放静态html资源的文件夹
app.use(
views(__dirname + "/views", {
extension: "jade",
})
);
// app.use(views(__dirname + '/views-ejs', {
// extension: 'ejs'
// }));
// 处理跨域
app.use(async (ctx, next) => {
// 允许来自所有域名请求
ctx.set("Access-Control-Allow-Origin", "*");
// 设置所允许的HTTP请求方法
ctx.set("Access-Control-Allow-Methods", "OPTIONS, GET, PUT, POST, DELETE");
// 字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段.
ctx.set(
"Access-Control-Allow-Headers",
"x-requested-with, accept, origin, content-type"
);
// 服务器收到请求以后,检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。
// Content-Type表示具体请求中的媒体类型信息
ctx.set("Content-Type", "application/json;charset=utf-8");
// 该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。
// 当设置成允许请求携带cookie时,需要保证"Access-Control-Allow-Origin"是服务器有的域名,而不能是"*";
ctx.set("Access-Control-Allow-Credentials", true);
// 该字段可选,用来指定本次预检请求的有效期,单位为秒。
// 当请求方法是PUT或DELETE等特殊方法或者Content-Type字段的类型是application/json时,服务器会提前发送一次请求进行验证
// 下面的的设置只本次验证的有效时间,即在该时间段内服务端可以不用进行验证
ctx.set("Access-Control-Max-Age", 300);
if (ctx.method == "OPTIONS") {
ctx.body = 200;
}
await next();
});
// logger
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = new Date() - start;
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
router.use("/", index.routes(), index.allowedMethods());
app.use(router.routes(), router.allowedMethods());
// response
const koaBody = require("koa-body");
app.use(
koaBody({
multipart: true,
formidable: {
maxFileSize: 200 * 1024 * 1024, // 设置上传文件大小最大限制,默认2M
},
})
);
app.on("error", function (err, ctx) {
console.log(err);
});
module.exports = app;