Как включить JS-скрипт в файл ejs, приложение nodeJS?

Я делаю nodeJS tuto на открытый класс. Я использую шаблонизатор ejs. Я пытаюсь запустить простой JS-скрипт, но не могу.

Вот моя структура приложения:

App_toDoList/
│
├──app.js
├──package-lock.json
├──package.json
│
├── js/
├── node_modules/
└── views/
    ├── modify.ejs
    └── todo.ejs

Я запускаю свой сервер с app.js:

var express = require('express');
var session = require('cookie-session'); // Charge le middleware de sessions
var bodyParser = require('body-parser'); // Charge le middleware de gestion des paramètres
var urlencodedParser = bodyParser.urlencoded({ extended: false });

var app = express();


/* On utilise les sessions */
app.use(session({secret: 'todotopsecret'}))


/* S'il n'y a pas de todolist dans la session,
on en crée une vide sous forme d'array avant la suite */
.use(function(req, res, next){
    if (typeof(req.session.todolist) == 'undefined') {
        req.session.todolist = [];
    }
    next();
})

/* On affiche la todolist et le formulaire */
.get('/todo', function(req, res) {
    res.render('todo.ejs', {todolist: req.session.todolist});
})

/* On ajoute un élément à la todolist */
.post('/todo/add/', urlencodedParser, function(req, res) {
    if (req.body.newtodo != '') {
        req.session.todolist.push(req.body.newtodo);
    }
    res.redirect('/todo');
})

/* Supprime un élément de la todolist */
.get('/todo/delete/:id(\\d+)', function(req, res) {
    if (req.params.id != '') {
        req.session.todolist.splice(req.params.id, 1);
    }
    res.redirect('/todo');
})

.get('/todo/modify/:id(\\d+)',function(req,res){
  if (req.params.id != '') {
    res.render('modify.ejs', {index: req.params.id, toModify: req.session.todolist[req.params.id]})
  }
})

.post('/todo/modified/:id(\\d+)', urlencodedParser, function(req, res) {
    if (req.body.modifytodo != '') {
        req.session.todolist[req.params.id]=req.body.modifytodo;
    }
    res.redirect('/todo');
})
/* On redirige vers la todolist si la page demandée n'est pas trouvée */
.use(function(req, res, next){
    res.redirect('/todo');
})

.listen(8080);

Как видите, я называю рендер todo.ejs:

<!DOCTYPE html>

<html>

<head>
  <title>Ma todolist</title>
  <style>
    a {
      text-decoration: none;
      color: black;
    }
  </style>
      <script src = "/js/myJS.js"></script>
</head>

<body>
  <h1>Ma todolist</h1>

  <ul>
    <% todolist.forEach(function(todo, index) { %>
      <li>
        <a href = "/todo/delete/<%= index %>">✘</a>
        <%= todo %>
          <a href = "/todo/modify/<%= index %>">?️</a>
      </li>
      <% }); %>
  </ul>

  <form action = "/todo/add/" method = "post">
    <p>
      <label for = "newtodo">Que dois-je faire ?</label>
      <input type = "text" name = "newtodo" id = "newtodo" autofocus />
      <input type = "submit" />
    </p>
  </form>

  <input type = "text" name = "date" id = "date">



</body>

</html>

Моя проблема в том, что скрипт myJS.js не запускается. В нем просто alert('hello'), и в моем браузере (Firefox) не появляется никаких предупреждений.

Дело в том, что если я сохраню todo.ejs в todo.html (стираю часть ejs), появится предупреждение.

Я боюсь, что проблема связана с тем, как мой сервер узлов обрабатывает каталог. Я нашел это, но это мне не очень помогает.

Если у вас есть идеи или вопросы, не стесняйтесь сообщить мне. Я новичок в JS, node и т. д., Поэтому решение может быть детской игрой.

Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
6 400
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, я нашел свою ошибку. Я никогда не указывал своему серверу узла, где находятся статические файлы. Я добавляю эту строку app.use(express.static('public')); над строкой сеанса. И создаю папку '/public' рядом с app.js

Таким образом, мой сервер отправляет файл, когда для шаблона ejs требуется изображение, CSS или JS.

То же самое с app.use(express.static(__dirname + "/public"));?

fedeteka 04.02.2019 20:07

Другие вопросы по теме