我想在Kotlin/JS中进行服务器端开发!

你好,我是Mayamito。
这次我用Kotlin/JS和kotlinx-nodejs搭建了一个简单的服务器示例。

kotlinx-nodejs的介绍

kotlinx-nodejs提供了Node.js API的Kotlin封装。可以将其视为TypeScript中的d.ts文件集合。详见https://github.com/Kotlin/kotlinx-nodejs。

引入

在 build.gradle 中添加一个依赖并将目标设为 nodejs。

repositories {
    mavenCentral()
    jcenter() // 追加
}

dependencies {
    implementation(kotlin("stdlib-js"))
    implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7") // 追加
}

kotlin.js {
    nodejs() // 追加
}

尝试编写一个简单的HTTP服务器。

如果收到请求,我将尝试编写一个简单的服务器,只需返回其URL和方法即可。

fun main() {
    val server = http.createServer { req, res ->
        res.write("url: ${req.url}\n")
        res.write("method: ${req.method}")
        res.end()
    }
    server.listen(8080)
}

如果你有使用Node.js编写服务器的经验,可能会知道一些内置函数的用法并没有太大变化。尽管我是Node的初学者,但我几乎可以将用JavaScript编写的示例代码直接转换成Kotlin。

启动服务器

在终端里

./gradlew nodeRun

当你执行这个操作时,在指定的端口(本例中是8080)上会启动服务器。
实际上,使用curl进行测试的时候会得到如下的结果。

curl -X GET localhost:8080/hoge
url: /hoge
method: GET

curl -X POST localhost:8080/hoge
url: /hoge
method: POST

将代码编译为JS

如果想要通过使用Node命令来执行JS文件,而不是通过Gradle来进行,那么需要进行一些额外的配置。

首先,在 build.gradle 文件中添加 webpack-node-externals 的依赖,并将 browser 添加为目标。

dependencies {
    implementation(kotlin("stdlib-js"))
    implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7")
    implementation(npm("webpack-node-externals", "2.5.1")) // 追加
}

kotlin.js {
    browser() // 追加
    nodejs()
}

在项目根目录的 webpack.config.d 目录中,根据以下内容创建 webpack.config.js 文件。

var nodeExternals = require('webpack-node-externals');
config.target = 'node';
config.externals = [nodeExternals()];

在终端上

./gradlew browserWebpack

执行该操作后,将在build/distributions目录下生成已构建的JavaScript文件。默认情况下,生成的文件名为项目名称.js,但如果想要更改为任意名称,可以在build.gradle的webpackTask中添加以下内容。

kotlin.js {
    browser {
        webpackTask {
            outputFileName = "main.js" // 生成したいファイル名
        }
    }
    nodejs()
}

可以使用node命令来执行生成的JavaScript文件。

node main.js   

总结

    • Kotlin/JSでもサーバーサイドはできる

 

    JSを吐き出したいときにはターゲットをブラウザにしてWebpackでビルドするという直感に反する作業が必要

情報不足的情况下,结果却出乎意料地很顺利。喜欢Kotlin的大家也一定要试一试。

这次的示例代码我已经在我的GitHub上公开了,如果你方便的话,请随意访问。
https://github.com/yt8492/KotlinOnNodeJSSample

在中文中,参考的另一种表达方式是”借鉴”。

以下是对 https://github.com/Kotlin/kotlinx-nodejs 和 https://saku.io/build-for-node-runtime-using-webpack/ 的简述,仅提供一种选项:

https://github.com/Kotlin/kotlinx-nodejs 是一个用 Kotlin 编写的 Node.js 扩展库。

https://saku.io/build-for-node-runtime-using-webpack/ 是有关使用 Webpack 构建 Node.js 运行时的主题。

广告
将在 10 秒后关闭
bannerAds