NodeJS + Express обслуживал HTML файл, не загружая js файл?

Я запускаю NodeJS-сервер, который использует общий путь для работы с файлом 'index.html'. В этом файле я связываюсь с файлом javascript в том же каталоге. Этот файл javascript загружен неправильно. Ошибка в моей консоли гласит: "Uncaught SyntaxError: Unexpected Token <", который после исследования, похоже, означает, что путь к моему JS файлу неверен. Однако файл js находится в том же каталоге, что и "index.html", и я ссылаюсь на него так, чтобы это было правильно?

Вот мой код

server.js

var express = require('express');
var app = express();
var config = require('./config');
var apiRouter = express.Router();
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var User = require('./app/models/User');
var jwt = require('jsonwebtoken');
var path = require('path');

//Set the public folder
app.use(express.static('/public'));

//Allows us to parse POST data.
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

mongoose.connect(config.db);

var apiRouter = require('./app/routes/api')(app, express);

app.use('/api', apiRouter);

//MEAN apps use a catchall after any routes created by Node.

app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, 'public/app/views/index.html'));
});

app.listen(1337);

console.log('Server started at ' + Date());

общественности/приложение/просмотров/index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="./test.js"></script>
<head>
<body>
    <h1>Served by node + express.</h1>
</body>
</html>

общественности/приложение/просмотров/test.js

console.log('test.js loaded');

Ответ 1

Вы должны установить свою статическую папку следующим образом

app.use(express.static(__dirname + '/public'));

Кроме того, ваш html файл будет выглядеть внутри самой/общей папки для вашего файла script. Вам нужно указать свой файл index.html в правильном пути к вашему файлу script.

<script src="/app/views/test.js"></script>

Ответ 2

Вот что происходит:

  • Браузер запрашивает /, на который отвечает ваш общий маршрут, поэтому он возвращается index.html.

  • Затем браузер видит script в html at ./test.js, поэтому браузер затем интерпретирует это как /test.js и делает запрос на это. Среднее ПО express.static просматривает public/test.js, который не существует, поэтому он передает выполнение следующему определенному маршруту, который соответствует запросу, который является вашим полным маршрутом. Это означает, что html отправляется для файла javascript, следовательно, вы видите ошибку.

Чтобы исправить это, вам нужно изменить ./test.js на фактический относительный путь (./app/views/test.js) или использовать абсолютный путь (/app/views/test.js), чтобы убедиться, что правильный путь всегда используется, независимо от того, что текущий путь.

Кроме того, вам нужно будет изменить это:

app.use(express.static('/public'));

примерно так:

app.use(express.static(__dirname + '/public'));

В противном случае промежуточное программное обеспечение express.static будет искать каталог с именем public от корня вашей файловой системы, и у вас будет такая же проблема с файлом html, который будет обслуживать html для вашего запроса файла javascript.

Ответ 3

safsafasfsaasfas s fa as asf asf