1. 概述

Kotlin 是 JetBrains 开发的新一代编程语言,因其简洁性和安全性,在 Android 开发社区中迅速走红,成为 Java 的热门替代方案。

除了在 JVM 上运行外,Kotlin 还支持编译成 JavaScript,实现前后端统一语言开发。本文将重点介绍如何使用 Kotlin 编写运行在 Node.js 环境中的服务端应用。

通过 Kotlin 转译为 JavaScript(Transpiling),我们可以同时面向 JVM 和 JavaScript 平台进行开发,这大大扩展了 Kotlin 的适用范围。

接下来,我们将一步步构建一个基于 Node.js 的 Kotlin 示例项目。

2. Node.js 环境准备

Node.js 是一个轻量、快速、跨平台的 JavaScript 运行时环境,广泛用于服务器和桌面应用程序。

2.1. 安装 Node.js

前往 Node 官网 下载并安装 Node.js。安装完成后会自带 npm 包管理工具。

进入一个空目录,初始化项目:

npm init

按照提示输入以下信息:

  • name: kotlin-node
  • description: Kotlin Node Example
  • entry point: crypto.js

其余字段保持默认即可。该操作会生成 package.json 文件。

接着安装所需的依赖包:

npm install
npm install kotlin --save
npm install express --save

以上命令会在当前目录下安装 kotlinexpress 模块,供后续使用。

3. 使用 Kotlin 构建 Node.js 应用

本节我们将在 Kotlin 中实现一个简单的加密货币价格查询 API 服务。

3.1. 初始化 Kotlin 项目

我们推荐使用 Gradle 来构建 Kotlin 项目。首先确保已安装 Gradle,可参考 Gradle 官方安装指南

然后使用 Gradle 的 init 任务初始化项目结构,选择如下配置:

  • Project type: basic
  • Language: Kotlin
  • Build script DSL: Groovy
  • Project name: kotlin-node
  • Package name: com.baeldung.kotlinjs

初始化后会生成一个 build.gradle 文件,替换其内容如下:

buildscript {
    ext.kotlin_version = '1.4.10'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'com.baeldung'
version '1.0-SNAPSHOT'
apply plugin: 'kotlin2js'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
    testCompile "org.jetbrains.kotlin:kotlin-test-js:$kotlin_version"
}

compileKotlin2Js.kotlinOptions {
    moduleKind = "commonjs"
    outputFile = "node/crypto.js"
}

⚠️ 注意两个关键点:

✅ 第一,使用了 kotlin2js 插件来将 Kotlin 编译为 JavaScript。

✅ 第二,设置了 moduleKind = "commonjs",以兼容 Node.js 模块系统;并通过 outputFile 指定输出路径为 node/crypto.js

⚠️ 请确保 build.gradle 中指定的 Kotlin 版本与 package.json 中的一致。

3.2. 实现 API 接口

创建源码目录 src/main/kotlin,并在其中建立包路径 com/baeldung/kotlinjs

新建文件 CryptoRate.kt,写入如下代码:

external fun require(module: String): dynamic

fun main(args: Array<String>) {
    
}

接着引入 express 模块并启动服务监听 3000 端口:

val express = require("express")

val app = express()
app.listen(3000, {
    println("Listening on port 3000")
})

最后添加一个 /crypto 接口,返回模拟的加密货币价格数据:

app.get("/crypto", { _, res ->
    res.send(generateCryptoRates())
})

data class CryptoCurrency(var name: String, var price: Float)

fun generateCryptoRates(): Array<CryptoCurrency> {
    return arrayOf<CryptoCurrency>(
      CryptoCurrency("Bitcoin", 90000F),
      CryptoCurrency("ETH",1000F),
      CryptoCurrency("TRX",10F)
    );
}

📌 我们借助了 Node.js 的 Express 框架来快速搭建 RESTful 接口。

4. 启动并测试应用

运行此应用分为两步:先将 Kotlin 编译为 JavaScript,再通过 Node.js 执行。

执行构建命令:

./gradlew build

编译后的 JavaScript 文件将输出到 node/crypto.js

然后运行该文件:

node node/crypto.js

此时服务已启动,访问 http://localhost:3000/crypto 可看到如下 JSON 响应:

[
  {
    "name": "Bitcoin",
    "price": 90000
  },
  {
    "name": "ETH",
    "price": 1000
  },
  {
    "name": "TRX",
    "price": 10
  }
]

也可以使用 Postman 或 SoapUI 等工具调用该接口。

5. 小结

本文展示了如何使用 Kotlin 开发 Node.js 应用程序。借助 Kotlin 的 JavaScript 支持能力,我们可以用同一套语言完成前后端开发,提高开发效率。

虽然只是一个简单的 demo,但已经体现了 Kotlin 在多平台开发上的潜力。

完整示例代码可在 GitHub 获取。


原始标题:Kotlin and Javascript