node服务器部署前端代码

# 前言:

  上一篇博客三·丰·云免费服务器初体验使用三·丰·云免费云服务器已经将node环境搭建完毕,后面也试了下他家的免费虚拟主机,但是连接ftp上传文件,一直上传失败,所以放弃了体验虚拟主机的想法,还是继续搞服务器吧,使用node起服务首先想到的框架有express和koa,对比看了下github上star数,果断选了koa。

  然后,大概说下需要实现的功能:

  1. 起一个静态服务器,可以存放前端页面

  2.支持前端页面使用history模式,跳转页面再刷新不报错

  3.pm2进程管理

  4.因为后面需要接入微前端,服务器需要做跨域

  5.写后台接口

 

一、静态服务器,需要使用koa自己的koa-static

const serve = require('koa-static');
app.use(serve(path.join(__dirname)
+'/public/'))

这样就能在当前目录下的public文件夹下起一个静态服务器,如果静态服务需要跨域,需要把跨域中间件放置在serve之前执行

 

二、支持history模式

const { historyApiFallback } = require('koa2-connect-history-api-fallback');

app.use(historyApiFallback());

是基于connect-history-api-fallback实现的koa版本,默认会读取文件夹下的index.html,若不匹配路由,也会默认访问index.html

 

三、pm2管理

npm i pm2 -g

pm2需要全局安装,运行的时候需要配置进程名称,因为关闭进程需要指定名称,当然,不介意关闭全部进程就不用考虑进程名称了

 

四、跨域

app.use(async (ctx, next)=> {
    ctx.set('Access-Control-Allow-Origin', '*');
    ctx.set('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
    ctx.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    if (ctx.method == 'OPTIONS') {
      ctx.body = 200; 
    } else {
      await next();
    }
  });

有两个用途:

  • 本地方便调试调接口
  • 微前端的子应用需要支持跨域才能访问到子应用页面

跨域也可以使用koa2-cors,然后配置ctx.set('Access-Control-Allow-Origin', '*'),这个需要注意前端请求头是否存在withCredentials:true,服务器也需要配置响应头Access-Control-Allow-Credentials:true,然后Access-Control-Allow-Origin是不能为*号,需要指定域名才生效;

 

五、接口

const Router = require('@koa/router');
const koaBody = require('koa-body');

const Router = require('@koa/router');
const koaBody = require('koa-body');
const { createUser, getUser } = require('../lib/mongo');

const router = new Router();

router
    .get('/test', (ctx, next) => {
        ctx.body = 'Hello World';
    })
    .get('/user', (ctx, next) => {
        console.log('ctx=', ctx)
        ctx.body = `get Hello World ${ctx.params.name}`;
    })
    .post('/user',koaBody(),async (ctx, next) => {
        console.log('ctx=', ctx.request.body)
        try {
            const data = await getUser(ctx.request.body.username);
            console.log('data', data, data.length)
            if (data.length === 0) {
                await createUser(ctx.request.body);
                ctx.body = {status: 200}
            } else {
                ctx.body = {status: 100, msg: '用户已存在'}
            }
        } catch (err) {
            console.log('create失败', err)
            ctx.body = {status: 100, msg: '注册失败'}
        }
    })

module.exports = router;

  主要使用@koa/router实现接口路由,如果是post请求,需要使用koa-body去解析post传递过来的参数

 

 

总结:基本已经就能实现一个简单的koa服务,后面还会继续优化session,log日志等其它功能。

 

posted @ 2022-02-26 00:08  三页黎明  阅读(280)  评论(0编辑  收藏  举报