Использование Nodejs для рендеринга html-css-javascript-изображений

Я изучаю и тестирую nodejs с помощью html, css и javascript.

Когда я запускаю index.html локально (без веб-сервера), я вижу, что css, js, html, изображения правильно отображаются в моем браузере.

Проблема, когда я создаю server.js и просматриваю localhost:8000/index.html, он просто возвращает мой заголовок и абзац... нет хороших изображений, выполняются css, js...
Я прошел через SO и из-за вызова находится только в html-файле, но не в css/js/images.

Не знаю в чем проблема и как быть дальше.

Это мой server.js:

var express = require('express');
var connect = require('connect');
var http = require('http');

var path = "";

var app = connect().use(express.static(__dirname + path));
http.createServer(app).listen(8000);

Это мой index.html:

<!DOCTYPE html>
<html>
<head>
    <title>TEST NODEJS WEB</title>
    <!-- library -->
    <link rel = "stylesheet" href = "/home/xero/next/css/next.min.css">
    <script type = "text/javascript" src = "/home/xero/next/js/next.min.js"> 
    </script>
    <!-- Font Awesome -->
    <link rel = "stylesheet" href = "/home/xero/next/font- 
    awesome/css/font-awesome.min.css">
</head>
<body>
    <div id = "topology-container"></div>
    <!-- Application scripts -->
    <script type = "text/javascript" src = "topology_data.js"></script>
    <script type = "text/javascript" src = "action-panel.js"></script>
    <script type = "text/javascript" src = "topology.js"></script>
    <script type = "text/javascript" src = "main.js"></script>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>

Это структура папок на моей машине:

home
  xero
    next
      js/next.min.js
      css/next.min.css
    myweb
      index.html
      topology_data.js
      action-panel.js
      topology.js
      main.js
      server.js

Когда я просматриваю index.html..only, я вижу «Мой первый заголовок» и «Мой первый абзац».

Пожалуйста, помогите и посоветуйте мне дальше. Спасибо. Спасибо всем

Что за ошибка в консоли браузера?

Khushit Shah 25.04.2019 06:28

Я не вижу никакого кода в вашем server.js, который обрабатывает любой входящий запрос, так как же вы собираетесь получить файл HTML?

Ropali Munshi 25.04.2019 06:43
Поведение ключевого слова "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) для оценки ваших знаний,...
1
2
3 504
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поскольку вы используете сервер для обслуживания html. Ссылки в html относятся к базе сервера.

то есть

ваш сервер работает /home/xero/myweb

Итак, ваши ссылки в css или js становятся /home/xero/myweb/home/xero/next/css/next.min.css, Которого не существует

Так как вы не можете получить доступ к родительскому каталогу базового каталога вашего сервера.

Используйте следующую структуру каталогов

home
  xero
    myweb
      next
        js/next.min.js
        css/next.min.css
      index.html
      topology_data.js
      action-panel.js
      topology.js
      main.js
      server.js

А затем в index.html

<!DOCTYPE html>
<html>
<head>
    <title>TEST NODEJS WEB</title>
    <!-- library -->
    <link rel = "stylesheet" href = "/next/css/next.min.css">
    <script type = "text/javascript" src = "/next/js/next.min.js"> 
    </script>
    <!-- Font Awesome -->
    <link rel = "stylesheet" href = "/next/font-awesome/css/font-awesome.min.css">
</head>
<body>
    <div id = "topology-container"></div>
    <!-- Application scripts -->
    <script type = "text/javascript" src = "topology_data.js"></script>
    <script type = "text/javascript" src = "action-panel.js"></script>
    <script type = "text/javascript" src = "topology.js"></script>
    <script type = "text/javascript" src = "main.js"></script>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>

*Редактировать

Используйте app.use(express.static(<path>)). здесь — это документация.

код:

var express = require("express");
var connect = require("connect");
var http = require("http");

var path = "";

var app = connect().use(express.static(__dirname + path));

app.use(express.static("../next/"));

http.createServer(app).listen(8000);

Теперь в html вам просто нужно обратиться как css/next.min.css и js/next.min.js

Привет, сэр... спасибо.... но возможно ли, что я смогу поддерживать свою структуру каталогов..? Если я поддерживаю структуру... где я должен добавить/редактировать в server.js

chenoi 25.04.2019 06:57

Если я могу поддерживать структуру каталогов и что-то делать с server.js, чтобы он мог ссылаться на папку css и js

chenoi 25.04.2019 09:51

@chenoi Добавлено решение! :p и отметьте ответ, если он работает!

Khushit Shah 25.04.2019 12:20
Ответ принят как подходящий

Вам нужно будет создать API для отправки файла css и javascript с сервера Node. Поскольку вы уже используете express, вам не нужно использовать соединение и http для запуска сервера. Используя экспресс, вы можете запустить сервер, проверить код

`

var app = express();
app.listen(8000,  function() {
    console.info('app listening on port 8000!');
});

`

Чтобы отправить файлы next.min.css и next.min.js, просто создайте get api на своем сервере.

`

app.get('/script', (req,res) => {
    res.sendFile("/home/xero/next/js/next.min.js");
});

`

`

app.get('/css', (req, res) => {
    res.sendFile("/home/xero/next/css/next.min.css");
});

`

и вызовите эти API из вашего index.html файла.

`

<link rel = "stylesheet" href = "http://localhost:8000/css">
<script type = "text/javascript" src = "http://localhost:8000/script">

`

Проверьте все рабочее решение -

https://codesharehub.com/post/e6b58ce0dab274f977af2fd7a855008ff6034ffc

Я получаю сообщение об ошибке при запуске node server.js app.use(express.static(path.join(__dirname, path))); ^ TypeError: path.join не является функцией в Object.<anonymous> (/home/xero/next/server.js:20:29) в Module._compile (module.js:653:30) в Object.Module. _extensions..js (module.js:664:10) в Module.load (module.js:566:32) в tryModuleLoad (module.js:506:12) в Function.Module._load (module.js:498: 3) в Function.Module.runMain (module.js:694:10) при запуске (bootstrap_node.js:204:16) в bootstrap_node.js:625:3

chenoi 25.04.2019 09:40

Любой простой способ сделать это...?

chenoi 25.04.2019 09:49

Обновил код, оформите заказ по ссылке codesharehub.com/post/e6b58ce0dab274f977af2fd7a855008ff6034f‌​FC

Shubham Tiwari 25.04.2019 09:50

Это самый простой способ, он сработает, попробуйте, и я здесь, чтобы помочь вам, не беспокойтесь.

Shubham Tiwari 25.04.2019 09:52

Я получаю больше ошибок, сэр ... path.js: 28 throw new TypeError («Путь должен быть строкой. Получено» + проверка (путь)); ^ TypeError: Путь должен быть строкой. Получено { разрешить: [Функция: разрешить], нормализовать: [Функция: нормализовать], isAbsolute: [Функция: isAbsolute], присоединиться: [Функция: присоединиться], относительная: [Функция: относительная], _makeLong: [Функция: _makeLong], dirname: [Функция: dirname], basename: [Функция: basename], extname: [Function: extname], format: [Function: format], parse: [Function: parse],

chenoi 25.04.2019 09:55

Теперь это работает ... но значок / изображение меню не визуализируется должным образом .... Я протестировал его локально без веб-сервера, и все значки меню могут быть красиво отображены ...

chenoi 25.04.2019 10:03

Я думаю, вы используете font-awesome.min.css для иконок, верно?

Shubham Tiwari 25.04.2019 10:19

Да... хорошо... опечатка в моем файле шрифта... после изменения все в порядке... мои вопросы (1) Если у меня есть несколько файлов js для использования... как это сделать с этим решением? (2) например, font-awesome.min.css... как добавить это в server.js?

chenoi 25.04.2019 10:21

Вы можете сделать это, динамически указав путь к файлам, как показано ниже.

Shubham Tiwari 25.04.2019 10:23

app.get('/script/:pathToFile', (req,res) => { res.sendFile("/home/xero/next/js/" + req.params.pathToFile); });

Shubham Tiwari 25.04.2019 10:24

обновлено решение для динамических файлов, оформить заказ codesharehub.com/post/e6b58ce0dab274f977af2fd7a855008ff6034f‌​FC

Shubham Tiwari 25.04.2019 10:37

Если это поможет, пожалуйста, лайкните мой пост codesharehub.com/post/e6b58ce0dab274f977af2fd7a855008ff6034f‌​FC на codesharehub.com

Shubham Tiwari 25.04.2019 10:38

Я пробовал выше... не работает... нужно ли комментировать app.get('/script', (req,res) => { res.sendFile("/home/xero/next/js/next.min .js");?

chenoi 25.04.2019 10:40

Да, если вы хотите использовать динамическое решение, вы можете прокомментировать приведенное выше API и использовать API, который динамически отправляет файл javascript.

Shubham Tiwari 25.04.2019 10:43

Я очень ценю ваше время и поддержку в этом... спасибо, сэр.

chenoi 25.04.2019 10:51

Спасибо, Ченой, и вы можете поделиться своими проектами и кодом на codesharehub.com. Вы можете создать свое резюме и добавить свои проекты вместе с ним бесплатно.

Shubham Tiwari 25.04.2019 11:13

@chenoi или просто используйте однострочник app.use(express.static("../next")) без лишних слов.

Khushit Shah 25.04.2019 12:48

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