Когда я связываю файл JavaScript в HTML, он отправляет запрос на сервер и вызывает ошибку - PullRequest
0 голосов
/ 30 сентября 2018

Я использую express и node.js в движке бэкенда и ejs в front-end.Мой app.js выглядит следующим образом

app.get('/book/:id', (req, res)=>{
var book_id = req.params.id;
console.log('this book :', book_id);
Book.findOne({
    book_id
}).then((book)=>{
    res.render('book.ejs', {book, title: "Book"});
}).catch((e)=>{
    // console.log(e);
});
});

файл book.ejs

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>
    <script type="text/javascript" src="jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="books.js"></script>
</head>
<body style="font-family: arial">
    <h1><%= title %></h1>
</body>
</html>

Но когда я направляю страницу к книге / 1234, я получаю следующий логин на моем сервере

this book : 1234
this book : jquery-3.3.1.min.js
this book : book.js

Почему jquery-3.3.1.min.js и book.js отправляются в маршрут book /: id?Я только отправляю book / 1234, но jquery-3.3.1.min.js и book.js также отправляются на сервер и вызывают ошибку.

Журнал консоли браузера это

GET http://localhost:3000/book/jquery-3.3.1.min.js net::ERR_ABORTED 500 (Internal Server Error)
1234:1 Refused to execute script from 'http://localhost:3000/book/jquery-3.3.1.min.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
1234:6 GET http://localhost:3000/book/books.js net::ERR_ABORTED 500 (Internal Server Error)
1234:1 Refused to execute script from 'http://localhost:3000/book/books.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Я думаю, что ваш файл book.ejs находится по маршруту '/ book'.если это так, ваш скрипт-тег, такой как <script type="text/javascript" src="books.js"></script>, будет обращаться к маршруту /book/book.js, а не к вашим ресурсам.поэтому вы должны установить свой атрибут src как этот /book.js и убедиться, что вы сделали свои ресурсы доступными.

0 голосов
/ 30 сентября 2018

Вы используете относительный путь в атрибуте src.Поскольку вы обслуживаете страницу из /books/<id>, если вы используете относительный путь, браузер будет понимать его как /books/(relative_path_of_resource), и поэтому, когда он сталкивается с этими ссылками, он отправляет запрос в books / jquery.js и books / books.js

Вы должны преобразовать вашу ссылку, чтобы указать правильный статический путь к файлам js.Перейдите по этой ссылке - https://expressjs.com/en/starter/static-files.html, чтобы узнать, как обслуживать статические файлы, и после настройки обслуживания вы можете изменить ссылки на /static/books.js и /static/jquery.js

.
0 голосов
/ 30 сентября 2018

Поскольку ссылки на скрипты имеют относительные пути, они загружаются из текущего пути, который равен /book.

Они должны иметь либо абсолютные пути:

<script type="text/javascript" src="/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="/books.js"></script>

Или базовый URL должен бытьуказано:

<base href="/">
...