I’m trying to create simple node server
, using kotlin
lang, that is replicating the basic sample here:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
So, I did the below:
Created new folder, named it node
Created new gradle project
using this command: gradle init --type java-library
Deleted the src/main
and the src/test
folders
Created the src/kotlin
and src/resources
folders
Replaced the content of the build.gradle
file by:
buildscript {
ext.kotlin_version = '1.2.21'
ext.node_dir = 'node'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'kotlin2js'
repositories { jcenter() }
dependencies {
def kotlinx_html_version = "0.6.8"
compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
}
sourceSets.main {
kotlin.srcDirs += 'src/kotlin'
resources.srcDirs += 'src/resources'
}
compileKotlin2Js.kotlinOptions {
outputFile = "${projectDir}/${node_dir}/index.js"
moduleKind = "commonjs"
sourceMap = true
}
clean.doFirst() {
delete("${node_dir}")
}
Installed kotlin
from npm
as local version: npm i kotlin
Note: installing it globally npm i -g kotlin
did not work at all.
Created my file at src/kotlin/Main.Kt
as below:
external fun require(module:String):dynamic
fun main(args: Array<String>) {
println("Hello JavaScript!")
val http = require("http")
val hostname = "127.0.0.1"
val port = 3000
println("Server will try to run at http://${hostname}:${port}/")
val server = http.createServer{req, res ->
res.statusCode = 200
res.setHeader("Content-Type", "text/plain")
res.end("Hello World\n")
}
server.listen{port, hostname ->
println("Server running at http://${hostname}:${port}/")
}
}
Built the project using gradle build
and got the index.js
file generated as required.
Once running the file node index.js
it did not work, and looks the app not reading the values of port
and host
upon calling the server.listen
.
The structure, code and output of the app are in this screenshot:
The index.js
generated is:
(function (_, Kotlin) {
'use strict';
var println = Kotlin.kotlin.io.println_s8jyv4$;
var Unit = Kotlin.kotlin.Unit;
function main$lambda(req, res) {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
return res.end('Hello World\n');
}
function main$lambda_0(port, hostname) {
println('Server running at http://' + hostname + ':' + port + '/');
return Unit;
}
function main(args) {
println('Hello JavaScript!');
var http = require('http');
var hostname = '127.0.0.1';
var port = 3000;
println('Server will try to run at http://127.0.0.1:3000/');
var server = http.createServer(main$lambda);
server.listen(main$lambda_0);
}
_.main_kand9s$ = main;
main([]);
Kotlin.defineModule('index', _);
return _;
}(module.exports, require('kotlin')));
//# sourceMappingURL=index.js.map