## 1. Project Overview & Quickstart (midwayjs/README.en-US)

# README.en-US

Open-source repository midwayjs/README.en-US

### Repository Details
- **Repository:** [midwayjs/README.en-US](https://github.com/midwayjs/README.en-US)
- **Primary Language:** Code

*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*

## 2. Official Technical Reference & Guides (midwayjs/midwayjs.github.io)

## File: README.md

# midway site

```bash
npm i
# dev site in docs
npm run dev
# run build
npm run deploy
git commit -m "docs:add site"
git push origin master
```

---

## File: docs/en/index.md

English Document is not ready.

Please see docuemnt with `?translate=en` parameter.

Like: [introduction](https://www.yuque.com/midwayjs/midway_v2/introduction?translate=en)

---

## File: docs/README.md

---
home: false
nav: false
actionText: 快速上手 →
actionLink: /guide
footer: Copyright © 2018-present MidwayJs
pageClass: home-class
---

  
    
      
      
        <nav>
          [使用文档](https://www.yuque.com/midwayjs/midway_v2)
          [示例库](http://demo.midwayjs.org/)
          [API](/api-reference/index.html)
          [Node 地下铁 Club](https://subway.midwayjs.org)
          [备用文档](start_app.html)
        </nav>
        
      
    
  
  
    
      
        一个面向未来的
        云端一体 Node.js 框架
        Midway 是一个适用于构建 Serverless 服务，传统应用、微服务，小程序后端的 Node.js 框架
      
      
        
          <a class="home-top-button button view" href="https://www.yuque.com/midwayjs/midway_v2">访问文档</a>
          
          
          
        
        <a class="home-top-button button white" href="https://github.com/midwayjs/midway">源码</a>
      
    
  
  
    
      Midway Serverless 2.0
      全新的一体化方案
      全新的 Serverless 测试方案
      业界首创的全栈开发方式
      我们的发布会已结束，可以扫描右侧二维码观看回放
      
        
          
          bilibili 前端圈（直播回放）
        
         
          
          Node.js 地下铁
        
      
    
  
  
    
      不论你在寻求何种解决方案，
      Midway 总能提供给你最适合的那一个
      
      
      
      <a class="home-solution-more button" href="http://demo.midwayjs.org/">查看所有解决方案</a>
      
        
          <a class="ad-middle-button button white" href="http://d2forum.alibaba-inc.com/" target="_blank">点击报名</a>
        
        
          <a class="ad-middle-button button white" href="https://mudu.tv/watch/7560584">了解更多</a>
        
      
    
  
  
    
      为什么选择 Midway?
      
        Serverless 应用云端一体
        Midway 不仅提供了和各个前端框架结合的能力，在传统的开发基础上，更增加了一体化研发模式，让前端业务能够更自如的调用 Node.js 代码，开发的更快更简单。
        
      
      
        代码复用和组件化能力
        Midway  不仅抽象出了满足不同场景的上层框架，也提供了跨场景复用的组件化能力，甚至还提供了业务代码的复用组件 ，让业务代码可以轻量化的拷贝和分享到不同的场景应用。
        
      
      
        一份代码，多场景部署
        Midway 提供了一套完整的解决方案，只需要写一次代码，就可以自动构建出适合于传统应用 ，微服务，乃至 Serverless 环境的代码包 ，方便用户移植程序到不同的部署环境。
        
      
      
        高并发业务稳定高效
        Midway 在 阿里集团内部已经普遍使用，经过了多次大促的洗礼，整个框架已经非常高效和稳定。默认情况下， Midway 在 Web Application 开发时提供了非常多的内置能力，用户无需再去查询其他能力。
        
      
    
  
  
    
      加入我们
      MidwayJs 是一个开源品牌，旗下的产品都为 MIT 协议，欢迎各位提交代码 ，一起共建 Node.js 生态。
      
    
  
  
    
      
        © 2021 ~ ∞ Midwayjs@Serverless
        <a class="link" href="https://github.com/midwayjs/midway">Github</a>
        <a class="link" href="https://github.com/midwayjs/midway/issues">Issue</a>
        <a class="link" href="https://www.yuque.com/midwayjs/topics">Help</a>
        <a class="link" href="http://demo.midwayjs.org/">Gallery</a>
      
      <a class="bottom-logo"></a>
      
        <a class="link" href="https://github.com/midwayjs/pandora">Pandora</a>
        <a class="link" href="https://github.com/midwayjs/injection">Injection</a>
        <a class="link" href="https://github.com/midwayjs/sandbox-docker">Sandbox</a>
        <a class="link" href="https://ice.work/">ICE</a>
      
    
  
  <script type="text/javascript">document.write(unescape("%3Cspan id='cnzz_stat_icon_1279723477'%3E%3C/span%3E%3Cscript src='https://v1.cnzz.com/z_stat.php%3Fid%3D1279723477' type='text/javascript'%3E%3C/script%3E"));</script>

<script>
let topWallList = [
  { cover: '//gw.alicdn.com/imgextra/i4/19999999999999/O1CN01PEPPo02NjasvUe8cc_!!19999999999999-2-tps.png' }, // react
  { cover: '//gw.alicdn.com/tfs/TB1Cdu2UYr1gK0jSZFDXXb9yVXa-1200-669.png' }, // vue
  { cover: '//gw.alicdn.com/tfs/TB18DKdjCR26e4jSZFEXXbwuXXa-1200-669.png' }, // rax
  { cover: '//gw.alicdn.com/tfs/TB11mzgg0Tfau8jSZFwXXX1mVXa-1200-669.png' }, // tablestore
  { cover: '//gw.alicdn.com/imgextra/i3/19999999999999/O1CN01HLo3Pi2NjasqFIZbi_!!19999999999999-2-tps.png' }, // koa
  { cover: '//gw.alicdn.com/imgextra/i2/19999999999999/O1CN01LggSYp2NjassPrZeZ_!!19999999999999-2-tps.png' }, // ice
  { cover: '//gw.alicdn.com/tfs/TB1l2LaU1L2gK0jSZFmXXc7iXXa-1200-669.png' }, // hexo
  { cover: '//gw.alicdn.com/tfs/TB12AhMjcVl614jSZKPXXaGjpXa-1200-669.png' }, // express
  { cover: '//gw.alicdn.com/tfs/TB1NtHPh5pE_u4jSZKbXXbCUVXa-1200-669.png' }, // egg
  { cover: '//gw.alicdn.com/tfs/TB1bonEgsieb18jSZFvXXaI3FXa-1200-669.png' }, // dingtalk
  // { cover: '//gw.alicdn.com/tfs/TB1oq7GfxvbeK8jSZPfXXariXXa-1200-669.png' }, // covid19
  { cover: '//gw.alicdn.com/tfs/TB1Fh51U.Y1gK0jSZFMXXaWcVXa-1200-669.png' }, // antd
  { cover: '//gw.alicdn.com/tfs/TB1Ro.miMgP7K4jSZFqXXamhVXa-1200-669.png' }, // typeorm
  { cover: '//gw.alicdn.com/imgextra/i1/19999999999999/O1CN01FDOJdG2NjasvEbjxX_!!19999999999999-2-tps.png' }, // sequelize
  { cover: '//gw.alicdn.com/tfs/TB1MM_aU8r0gK0jSZFnXXbRRXXa-1200-669.png' }, // img
  { cover: '//gw.alicdn.com/tfs/TB1Fuy3UYr1gK0jSZFDXXb9yVXa-1200-669.png' }, // ssr
];
const solutionList = [
  { title: 'Serverless HTTP API' },
  { title: 'Serverless 定时器' },
  { title: 'Serverless 事件触发' },
  { title: 'RESTFul API' },
  { title: 'WebSocket' },
  { title: '微服务' },
  { title: 'React 一体化' },
  { title: 'Vue 一体化' },
  { title: 'ICE 一体化' },
  { title: 'Rax 一体化' },
];
topWallList = topWallList.sort(() => {
  return Math.random() - 0.5;
});
const topWallEle = document.getElementById('top-wall');
const solutionContainer = document.getElementById('home-solution-container');
const topWallItemList = [];
// render top wall
const lastLineIndex = (Math.ceil(topWallList.length / 5) - 1) * 5;
topWallList.forEach((item, i) => {
  const topWallItem = document.createElement('a');
  topWallItem.setAttribute('class', 'top-wall-item');
  topWallItem.setAttribute('href', item.link || 'http://demo.midwayjs.org/');
  topWallItem.setAttribute('target', '_blank');
  const topWallItemInner = document.createElement('div');
  topWallItemInner.setAttribute('class', 'top-wall-item-inner');
  topWallItemInner.style.backgroundImage = `url('${ item.cover }')`;
  topWallItem.appendChild(topWallItemInner);
  topWallEle.appendChild(topWallItem);
  topWallItemList.push(topWallItem);
  setTimeout(function () {
    topWallItem.style.opacity = 1;
  }, Math.random() * 1000);
});
solutionList.forEach((solutionData) => {
  const solutionItem = document.createElement('a');
  solutionItem.setAttribute('class', 'home-solution button');
  solutionItem.setAttribute('href', solutionData.link || 'http://demo.midwayjs.org/');
  solutionItem.setAttribute('target', '_blank');
  solutionItem.innerHTML = '' + (solutionData.title) + '';
  solutionContainer.appendChild(solutionItem);
});
// render why img
const allImg = Array.from(document.querySelectorAll('.home-why-img'));
if (window.IntersectionObserver) {
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(function(entry) {
      let box = entry.target;
      if (entry.intersectionRatio >= 0.9) {
        box.classList.add('display');
        box.previousElementSibling.classList.add('display');
      } else if (entry.intersectionRatio < 0.3) {
        box.classList.remove('display');
        box.previousElementSibling.classList.remove('display');
      }
    });
  }, {
    root: null,
    rootMargin: '0px', 
    threshold: [0.0, 0.1, 0.2, 0.3, 0.7, 0.8, 0.9, 1.0]
  });
  allImg.forEach(function (ele) {
    observer.observe(ele);
  });
} else {
  allImg.forEach(function (ele) {
    ele.classList.add('display');
    ele.previousElementSibling.classList.add('display');
  });
}
</script>