Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.07.2018, 17:43
Интересующийся
Отправить личное сообщение для dakociha Посмотреть профиль Найти все сообщения от dakociha
 
Регистрация: 26.04.2018
Сообщений: 26

Но теперь вопрос.Как достать названия файлов из директории и добавить их в <select>
При выборе файла его содержимое должно показываться в textarea
Ответить с цитированием
  #12 (permalink)  
Старый 23.07.2018, 17:56
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

var express = require("express")
var app = express()
var bodyParser = require("body-parser")
var fs = require('fs')

app.use(bodyParser.json())

app.get('/file/:name', function (request, response) {
  var content = ''
  if (fs.existsSync(request.params.name)) {
    content = fs.readFileSync('./' + request.params.name)
  } else {
    fs.appendFileSync('./' + request.params.name, request.params.name)
    content = fs.readFileSync('./' + request.params.name)
  }
  response.send(content)
})

app.post('/file/:name', function (request, response) {
  console.log(request.body)
  fs.writeFileSync('./' + request.params.name, request.body.content)
  response.send(fs.readFileSync('./' + request.params.name))
})

app.get('/', function (request, response) {
  response.send(`<html>
    <head>
      <meta charset="UTF-8">
      <title>Task39</title>
      <script>
        window.addEventListener('load', function() {
          console.log('loaded')
          var list = document.getElementById('list')
          list.addEventListener('change', function(e) {
            loadFile(e.target.options[e.target.options.selectedIndex].innerText)
          })
          loadFile(list.options[list.options.selectedIndex].innerText)
        })

        loadFile = (filename) => {
          fetch('/file/' + filename).then(r => r.text()).then(r => document.getElementById('file').value = r)
        }

        save = () => {
          var list = document.getElementById('list')
          fetch('./file/' + list.options[list.options.selectedIndex].innerText, 
            { 
              method: 'post', 
              body: JSON.stringify({ content: document.getElementById('file').value }),
              headers: new Headers({'content-type': 'application/json'}),
            }
          )
        }
      </script>
    </head>
    <body>
      <select id="list">
        <option>a.html</option>
        <option>b.html</option>
      </select>
      <br>
      <textarea id="file" style="width: 20%; height: 200px"></textarea>
      <br>
      <button onclick="save()">Save</button>
    </body>
  </html>
  `)
})

app.listen(2999, function () {
  console.log("Started on PORT 2999");
})


) схематично,...
Ответить с цитированием
  #13 (permalink)  
Старый 23.07.2018, 18:03
Интересующийся
Отправить личное сообщение для dakociha Посмотреть профиль Найти все сообщения от dakociha
 
Регистрация: 26.04.2018
Сообщений: 26

Спасибо
Ответить с цитированием
  #14 (permalink)  
Старый 23.07.2018, 18:49
Интересующийся
Отправить личное сообщение для dakociha Посмотреть профиль Найти все сообщения от dakociha
 
Регистрация: 26.04.2018
Сообщений: 26

Все файлы лежат в app.use(express.static(path.join(__dirname, 'public')));.
В папке public у меня есть папка test.Вопрос: как считать все имена файлов из /public/test/ и добавить в <option>
Как при запуске сервера заполнить option в select(у меня есть массив с именами файлов)

Последний раз редактировалось dakociha, 23.07.2018 в 19:35.
Ответить с цитированием
  #15 (permalink)  
Старый 23.07.2018, 19:03
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от dakociha
writeFileSync
это очень, очень, очень грустно..
Ответить с цитированием
  #16 (permalink)  
Старый 23.07.2018, 21:34
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Alexandroppolus,
как по твоему правильно?
var express = require("express")
var app = express()
app.get('/file/:name', (request, response) => {
//
})
app.listen(2999, function () {
 console.log("Started on PORT 2999")
})

или
(function() {
var express = require("express")
var app = express()
app.get('/file/:name', (request, response) => {
//
})
app.listen(2999, function () {
 console.log("Started on PORT 2999")
})
})()


или другой пример
Ответить с цитированием
  #17 (permalink)  
Старый 23.07.2018, 21:47
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

синхронные операции ввода/вывода катастрофически противопоказаны, если это сервер. Теряется основной замысел ноды, получается хрень.

вот если нода используется локально на компе, например как инструмент для сборки проекта (да вообще как любая тулза с запуском в консоли), то да, ***Sync удобно и просто.

Сообщение от SuperZen
как по твоему правильно?
или ... или
без разницы. В нодовских модулях всё локально, в глобальный объект не попадает

Последний раз редактировалось Alexandroppolus, 23.07.2018 в 21:57.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена цвета/картинки фона при нажатии на элемент Webtest Элементы интерфейса 16 20.04.2017 22:36
Удалить дубликат точки с запятой из поля при нажатии на кнопку espltd Элементы интерфейса 5 27.07.2015 08:20
Как пометить чекбокс при нажатии на кнопку? vasyakrn Элементы интерфейса 5 03.04.2015 12:10
Активация checkbox при нажатии на текст и изменение стиля у текста. ilyakor jQuery 2 10.06.2014 19:34
вывод нужного текста в текстовом поле при нажатии на кнопку! fifo4ka Общие вопросы Javascript 7 06.05.2008 13:36