Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Выполнение функции при нажатии кнопки на сайте node.js (https://javascript.ru/forum/node-js-io-js/74962-vypolnenie-funkcii-pri-nazhatii-knopki-na-sajjte-node-js.html)

wwIOPUCTww 21.08.2018 17:23

Выполнение функции при нажатии кнопки на сайте node.js
 
С javascript знаком, нужно при нажатии кнопки что бы сработала функция создания папки, а затем файла в ней. Через node.js у меня такое получается но только в тот момент когда запускаю Js файл через командную строку. Проблема моя в том что я не могу к кнопке на сайте присвоить функцию, смотрел "Гош... Дуд....", у него есть видео ролик где он пишет код, после чего запускает JS файл и создается папка с файлом, но мне нужно что-бы я нажал кнопку в браузере, и в этот момент запустилась эта функция, а для этого нужно присвоить той кнопке эту функцию вот этого он не показывает, типа "Вот смотрите я иду в магазин, купил килограмм картошки, принес ее домой, помыл, почистил, ну а дальше для вас не составит проблем приготовить из нее пюре", давлюсь сырой картошкой, а хочется приготовить горячее картофельное пюре. Как функции присваиваются. Сервер создал через Node.JS + Express (больше ни чего не подключал). Могу написать код что бы при запуске сервера создавались папки и файлы, но не могу присвоить функцию к кнопке, что бы при запущенном сервере все срабатывало.

SuperZen 22.08.2018 14:51

index.html
<html>

<head>
  <script>
    document.addEventListener('DOMContentLoaded', function () {
      document.getElementById('status').innerHTML = "Status: Loaded"
      document.getElementById('runner').addEventListener('click', function () {
        document.getElementById('status').innerHTML = "Status: Running..."
        fetch('/run_something').then(r => r.json()).then(({ status }) => {
          document.getElementById('status').innerHTML = `Status: ${status}`
        }).catch(function (error) {
          document.getElementById('status').innerHTML = `Status: ${error.message}`
        })
      })
    })
  </script>
</head>

<body>
  <h1>Expressed</h1>
  <hr/>
  <div id="status"></div>
  <hr/>
  <button id="runner">run something</button>
</body>

</html>


server.js
var express = require('express')
var app = express()
app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html')
})
app.get('/run_something', function (req, res) {
  res.send(JSON.stringify({ status: 'ok' }))
})
app.listen(4000, function () {
  console.log('started at http://localhost:4000')
})


package.json
{
  "name": "expressed",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "express": "^4.16.3"
  },
  "scripts": {
    "server": "node server.js"
  }
}


yarn install
yarn server

wwIOPUCTww 28.08.2018 19:23

Привет! Спасибо за пример SuperZen, я сделал все как сказал, у меня работает, но это в принципе я и сам мог сделать (если только я что то не понял из твоего посыла), мне нужно, что бы нажал кнопку "Создать папку" и исполнилась функция "fs.mkdir('New')"
index.html
<html>
<head>
  <script src="server.js"></script>
</head>
<body>
  <h1>Expressed</h1>
  <hr/>
  <div id="status"></div>
  <hr/>
  <button onclick="reid()">Создать папку</button>
</body>
</html>

server.js
var express = require('express')
var app = express()

function reid(){
  var fs = require('fs')
  fs.mkdirSync('New')
}
app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html')
})
app.listen(4000, function () {
  console.log('started at http://localhost:4000')
})

Запускаю "node server", жму кнопку и ноль эмоций, я что то не догоняю, помогите понять принцип.
За основу взял твой код, только изменил немного.

SuperZen 29.08.2018 14:27

server.js
var express = require('express')
var app = express()

function reid() {
    var fs = require('fs')
    fs.mkdirSync('New')
}

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html')
})

app.get('/createDirectory', function (req, res) {
    try {
        reid()
        res.send(JSON.stringify({ created: 'success' }))
    } catch (erorr) {
        res.send(JSON.stringify({ created: 'failed' }))
    }
})

app.listen(4000, function () {
    console.log('started at http://localhost:4000')
})


index.html
<html>

<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            document.getElementById('createDirectory').addEventListener('click', function(e) {
                fetch('/createDirectory').then(r => r.json()).then(r => {
                    alert(r.created)
                })
            })
        })
    </script>
</head>

<body>
    <h1>Expressed</h1>
    <hr/>
    <div id="status"></div>
    <hr/>
    <button id="createDirectory">Создать папку</button>
</body>

</html>


node server.js && open http://localhost:4000

wwIOPUCTww 30.08.2018 11:39

Спасибо, принцип понял, все функции нужные мне работают.

wwIOPUCTww 05.09.2018 16:39

Привет всем! Еще есть одна просьба, как создать папки с именем "переменной":

function reid() {
var fs = require('fs')
var x = proba
fs.mkdirSync('New/$x$')
}

server.js
var express = require('express')
var app = express()

function reid() {
    var fs = require('fs')
    var x = proba
    fs.mkdirSync('New/$x$')
}
app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html')
})

app.get('/createDirectory', function (req, res) {
    try {
        reid()
        res.send(JSON.stringify({ created: 'success' }))
    } catch (erorr) {
        res.send(JSON.stringify({ created: 'failed' }))
    }
})

app.listen(4000, function () {
    console.log('started at http://localhost:4000')
})

index.html
<html>

<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            document.getElementById('createDirectory').addEventListener('click', function(e) {
                fetch('/createDirectory').then(r => r.json()).then(r => {
                    alert(r.created)
                })
            })
        })
    </script>
</head>

<body>
    <h1>Expressed</h1>
    <hr/>
    <div id="status"></div>
    <hr/>
    <button id="createDirectory">Создать папку</button>
</body>

</html>

wwIOPUCTww 12.09.2018 11:27

Сделал, все оказалось очень просто:
function reid() {
var fs = require('fs')
var x = age
var y = 22
var z = 'new/papka/' + x + '/' + y
fs.mkdirSync(z)
}

Создается папка с путем: new/papka/age/22

SuperZen 12.09.2018 12:05

var fs = require('fs')
var path = require('path')
...
app.get('/createDirectory/:age/:id', function(req,res) {
  fs.mkdirSync(path.join('new', 'papka', req.params.age, req.params.id))
  res.json({status: 'created'})
})
...

можно юзать dynamic routes в express


Часовой пояс GMT +3, время: 13:28.