FeathersJS 快速入门指南:从零构建实时应用

FeathersJS 快速入门指南:从零构建实时应用

feathers The API and real-time application framework feathers 项目地址: https://gitcode.com/gh_mirrors/fe/feathers

前言

FeathersJS 是一个轻量级的 Node.js 框架,用于构建实时应用程序和 REST API。它基于 Express/Koa 构建,提供了简洁的服务架构和强大的实时功能。本文将带你从零开始,逐步构建一个完整的 Feathers 应用,包括 API 服务和前端界面。

环境准备

在开始之前,请确保你的开发环境满足以下要求:

  1. Node.js 最新稳定版本(建议使用 LTS 版本)
  2. npm 包管理工具(通常随 Node.js 一起安装)

验证安装是否成功:

node --version
npm --version

项目初始化

首先创建一个新项目目录并初始化 npm 项目:

mkdir feathers-basics
cd feathers-basics
npm init --yes

对于 TypeScript 用户,还需要额外安装 TypeScript 相关依赖:

npm install typescript ts-node @types/node --save-dev
npx tsc --init --target es2020

安装 Feathers 核心库

安装 Feathers 核心模块:

npm install @feathersjs/feathers --save

Feathers 的所有核心模块都位于 @feathersjs 命名空间下。

创建第一个 Feathers 应用

让我们创建一个简单的消息服务,它可以创建新消息并返回所有现有消息。

基础服务实现

创建一个 app.ts(TypeScript)或 app.mjs(JavaScript)文件:

import { feathers } from '@feathersjs/feathers'

// 消息数据接口
interface Message {
  id?: number
  text: string
}

// 消息服务类
class MessageService {
  messages: Message[] = []

  async find() {
    return this.messages
  }

  async create(data: Pick<Message, 'text'>) {
    const message: Message = {
      id: this.messages.length,
      text: data.text
    }
    this.messages.push(message)
    return message
  }
}

// 服务类型定义
type ServiceTypes = {
  messages: MessageService
}

const app = feathers<ServiceTypes>()

// 注册消息服务
app.use('messages', new MessageService())

// 监听创建消息事件
app.service('messages').on('created', (message: Message) => {
  console.log('新消息已创建:', message)
})

// 主函数
const main = async () => {
  await app.service('messages').create({ text: '你好 Feathers' })
  await app.service('messages').create({ text: '再次问好' })
  const messages = await app.service('messages').find()
  console.log('所有消息:', messages)
}

main()

运行这个应用,你将看到控制台输出新创建的消息和所有消息列表。

构建 API 服务器

上面的例子只是一个简单的脚本,现在我们将它转换为一个完整的 API 服务器。

安装必要依赖

npm install @feathersjs/socketio @feathersjs/koa --save

服务器实现

更新你的应用文件,添加以下内容:

import { koa, rest, bodyParser, errorHandler, serveStatic } from '@feathersjs/koa'
import socketio from '@feathersjs/socketio'

// 创建 KoaJS 兼容的 Feathers 应用
const app = koa<ServiceTypes>(feathers())

// 静态文件服务
app.use(serveStatic('.'))
// 错误处理
app.use(errorHandler())
// 请求体解析
app.use(bodyParser())

// 配置 REST API
app.configure(rest())
// 配置 Socket.io 实时 API
app.configure(socketio())

// 注册消息服务
app.use('messages', new MessageService())

// 实时连接处理
app.on('connection', (connection) => app.channel('everybody').join(connection))
app.publish((_data) => app.channel('everybody'))

// 启动服务器
app.listen(3030)
  .then(() => console.log('Feathers 服务器已启动: http://localhost:3030'))

// 创建初始消息
app.service('messages').create({ text: '来自服务器的问候' })

启动服务器后,访问 http://localhost:3030/messages 可以看到服务器返回的 JSON 格式消息列表。

构建前端界面

Feathers 的一个强大特性是它可以在浏览器中运行,使用相同的 API 与服务端通信。

创建 index.html 文件:

<!DOCTYPE html>
<html>
<head>
  <title>Feathers 示例</title>
  <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2/dist/tailwind.min.css" rel="stylesheet">
</head>
<body class="p-8">
  <h1 class="text-3xl font-bold mb-4">欢迎使用 Feathers</h1>
  
  <form onsubmit="sendMessage(event)" class="mb-4">
    <input id="message-text" type="text" class="border p-2 mr-2" placeholder="输入消息">
    <button type="submit" class="bg-blue-500 text-white p-2">发送</button>
  </form>
  
  <h2 class="text-xl mb-2">消息列表</h2>
  <div id="messages"></div>

  <script src="//unpkg.com/@feathersjs/client@^5.0.0/dist/feathers.js"></script>
  <script src="/socket.io/socket.io.js"></script>
  <script>
    const socket = io('http://localhost:3030')
    const app = feathers()
    
    app.configure(feathers.socketio(socket))
    
    async function sendMessage(event) {
      event.preventDefault()
      const input = document.getElementById('message-text')
      await app.service('messages').create({ text: input.value })
      input.value = ''
    }
    
    function addMessage(message) {
      const div = document.createElement('div')
      div.className = 'mb-2 p-2 bg-gray-100 rounded'
      div.textContent = message.text
      document.getElementById('messages').appendChild(div)
    }
    
    async function main() {
      const messages = await app.service('messages').find()
      messages.forEach(addMessage)
      app.service('messages').on('created', addMessage)
    }
    
    main()
  </script>
</body>
</html>

访问 http://localhost:3030 可以看到一个简单的消息界面,打开多个浏览器标签页可以实时看到消息同步。

总结与下一步

通过本文,我们完成了:

  1. 创建基础 Feathers 应用
  2. 实现内存消息服务
  3. 构建 REST 和实时 API 服务器
  4. 开发前端界面并与后端实时交互

这只是 Feathers 强大功能的冰山一角。在实际项目中,你可能会需要:

  • 数据库集成(MongoDB、SQL 等)
  • 用户认证系统
  • 更复杂的服务逻辑
  • 生产环境部署配置

Feathers 提供了 CLI 工具和丰富的生态系统来支持这些高级需求。建议在掌握基础知识后,进一步探索 Feathers 的更多可能性。

feathers The API and real-time application framework feathers 项目地址: https://gitcode.com/gh_mirrors/fe/feathers

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成旭涛Strange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值