title:
order: 5

category: 进阶指南

开始使用

简介

基于 Iceworks 能够一键生成 Ice 和 Node 的前后端分离的项目;前端使用 React 技术栈,后端使用 Koa 2.x 作为服务端开发框架。

特性

  • 一键生成项目
  • 基于飞冰海量物料快速组装页面
  • 可视化工程管理

目录结构

目录结构采用分层设计,主体分为 client 和 server 两部分,即 client 对应前端工程,server 对应服务端工程,提供 RESTful API 和 client 端进行数据通信;脚手架默认只提供最简的的 RESTful API 接口,因为在实际场景中,Node 层可能只是用来作为微服务架构中的 API 转发层,并不需要 ORM、数据库等功能。但可以通过插件化来进行支持,在创建项目的时候进行自定义选择生成项目的类型。

  1. project
  2. ├── client
  3. ├── components // 公共组件
  4. ├── layouts // 通用布局
  5. ├── pages // 页面
  6. ├── menuConfig.js // 导航配置
  7. ├── routerConfig.js // 路由配置
  8. ├── router.js // 路由入口
  9. ├── index.html
  10. ├── favicon.png
  11. └── index.js // 入口文件
  12. |
  13. ├── server
  14. ├── config // 配置文件
  15. ├── controller // 用于解析用户的输入,处理后返回相应的结果
  16. ├── middleware // 用于编写中间件
  17. ├── model // 用于放置模型
  18. ├── router // 用于路由文件
  19. └── app.js // 入口文件
  20. |
  21. ├── build // 构建后的前端静态资源
  22. ├── index.html
  23. ├── css
  24. └── js
  25. ├── .gitignore // git 忽略目录配置
  26. ├── .editorconfig // 代码风格配置
  27. ├── .eslintignore // eslint 忽略目录配置
  28. ├── .eslintrc // eslint 配置
  29. ├── .webpackrc.js // 自定义 webpack 配置
  30. ├── package.json // package.json
  31. └── README.md // 项目说明

client

client 用于组织前端工程资源,包括 HTML、CSS、JavaScript 等和 UI 相关的代码。

server

server 用于组织服务端的相关的代码,即常见的 MVC 的组织方式。

build

build 目录是 client 构建后的前端静态资源,Node 服务器启动的时候,该目录下的文件会映射至应用的根路径 / 下。

公共配置

公共配置包含代码风格、eslint 等基础配置,在整个应用中,前后端共用一套公共的基础配置。

使用 Iceworks 管理项目

基本操作

在模板页面创建项目的表单中,勾选 添加 Koa2 即可生成对应模板的 Koa 项目

Koa 项目 - 图1

使用 Iceworks 管理 Koa 项目的操作与前端项目完全一致,在项目页面支持添加页面、添加区块、依赖管理、布局管理、启动调试服务等操作。

Koa 项目 - 图2

启动调试

在终端执行 npm run start 命令启动 Koa 项目的调试服务,命令会分为 npm run clientnpm run server 两部分执行,也可以分别执行这两条命令来启动调试。

Koa 项目 - 图3

客户端的调试服务的默认端口是 4444,服务端的默认端口是 3000,客户端的启动端口可以通过 ice dev --project-type=node --port=端口号 命令更改,服务端的启动端口可以在项目目录下的 server/app.js 文件修改。

  1. const Koa = require('koa');
  2. const app = new Koa();
  3. const port = 3000;
  4. app.listen(port);

简单示例

这部分将以一个简单的示例介绍如何开发一个基于 Koa 框架的前后端分离项目。

配置环境

本节的环境配置步骤在项目模板中已经为我们配置完毕,如果需要对参数进行修改,可以参考以下步骤

package.json 中配置代理,允许客户端跨域访问服务端的 API 端口。

  1. "proxyConfig": {
  2. "/api": {
  3. "enable": true,
  4. "target": "http://127.0.0.1:3000"
  5. }
  6. }

注意:此处 target 的端口应与你 server 调试服务启动的端口保持一致。

server/app.js 中配置访问客户端的入口文件

  1. const serve = require('koa-static');
  2. const path = require('path');
  3. const app = new Koa();
  4. app.use(serve(path.join(__dirname, '..', 'build')));

添加依赖

在项目中添加 axios 依赖,用来向服务端发送 http 请求。

Koa 项目 - 图4

提供接口

接下来让我们在服务端编写接口提供给客户端调用,Node 项目模板的 server 目录已经为我们提供了一些简单的接口示例,用户可以查看项目目录下的 server/controller/user.js 文件查看这些示例接口的具体内容,在 server/router.js 文件中定义接口的路由和请求方式.

我们使用已经写好的 profile 接口,实现在控制台输出用户信息的简单示例。

调用接口

之后我们只要在客户端调用这些提供好的接口就可以了,我们打开项目目录下的 client/components/Header/index.js 文件,在用户的下拉列表中增加一项 用户信息

  1. <li
  2. className="user-profile-menu-item"
  3. onClick={this.getUserProfile}
  4. >
  5. <FoundationSymbol type="home2" size="small" />
  6. 用户信息
  7. </li>

在用户信息的 onClick 事件中,用 axios 向服务端发送 get 请求。

  1. getUserProfile = () => {
  2. axios
  3. .get('/api/profile')
  4. .then(function (response) {
  5. console.log(response);
  6. })
  7. .catch(function (error) {
  8. console.log(error);
  9. });
  10. };

最后点击用户信息,实现的效果如下图所示。

Koa 项目 - 图5

Koa 项目 - 图6