Создание простого Node-сервера с Kotlin
Я пытаюсь создать простой Node-сервер, используя Kotlin, чтобы повторить базовый пример:
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}/`);
});
Итак, я сделал следующее:
Создал новую папку, назвал ее node
Создайте npm package
с помощью npm init
Создан новый gradle project
используя эту команду: gradle init --type java-library
Удалил src/main
и src/test
папки
Создано src/kotlin
а также src/resources
папки
Заменено содержание build.gradle
подать по:
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}")
}
Установлены kotlin
от npm
как локальная версия: npm i kotlin
Примечание: установка его глобально npm i -g kotlin
не работал вообще.
Примечание: я сделал это также используя npm install
или же npm i
после добавления зависимостей в package.json
файл, который стал похож на:
{
"name": "kotlin-node-app",
"version": "1.0.0",
"description": "Node Application built with Kotlin Lang",
"main": "index.js",
"dependencies": {
"kotlin": "^1.2.21"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"kotlin"
],
"author": "Hasan Yousef",
"license": "ISC"
}
Создал мой файл на src/kotlin/Main.Kt
как показано ниже:
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}/")
}
}
Построил проект используя gradle build
и получил index.js
файл создан как требуется.
После запуска файла node index.js
это не работает, и выглядит приложение не читает значения port
а также host
по вызову server.listen
,
Структура, код и вывод приложения приведены на этом снимке экрана:
index.js
генерируется это:
(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
1 ответ
Я только что нашел, это в вызове server.listen
Считая синтаксис "server.listen(порт, имя хоста, резерв, обратный вызов);"
В Kotlin
так должно быть:
server.listen(port, hostname, fun() {
println("Server running at http://${hostname}:${port}/")
})
Итак, приведенный ниже код отлично работает со мной сейчас:
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, fun() {
println("Server running at http://${hostname}:${port}/")
})
/* OR
server.listen(port, hostname, {
println("Server running at http://${hostname}:${port}/") } )
*/
/* OR
server.listen(port, hostname) {
println("Server running at http://${hostname}:${port}/") }
*/
}
И сгенерированный скомпилирован index.js
файл:
(function (_, Kotlin) {
'use strict';
var println = Kotlin.kotlin.io.println_s8jyv4$;
function main$lambda(req, res) {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
return res.end('Hello World\n');
}
function main$lambda_0() {
println('Server running at http://127.0.0.1:3030/');
}
function main(args) {
println('Hello JavaScript!');
var http = require('http');
var hostname = '127.0.0.1';
var port = 3030;
println('Server will try to run at http://127.0.0.1:3030/');
var server = http.createServer(main$lambda);
server.listen(port, hostname, main$lambda_0);
}
_.main_kand9s$ = main;
main([]);
Kotlin.defineModule('index', _);
return _;
}(module.exports, require('kotlin')));
//# sourceMappingURL=index.js.map
Затем я запускаю это гладко, используя node node/index.js
команда