提取 API 无法加载 file:///C:/Users/Jack/Desktop/Books_H/book-site/public/api/books。对于 CORS 请求,必须"http"或"ht



刚刚开始在我的学校学习节点JS。他们给了我们这项半完成的任务,我需要制作下一个和预先的按钮。但是,当我运行index.html的那一刻,我会在控制台上遇到一些错误。错误是:

" Fetch API无法加载文件:///C:/users/jack/desktop/books_h/book-site/public/public/api/books。url方案必须为" http"或" https",以解决cors请求。">

另一个是:

"未被告人(在承诺中(TypeError:无法在htmldocument.document.addeventlistener上获取"。

我什至不知道如何开始解决这个问题。有帮助吗?

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=1000, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Hello</title>
</head>
<body>
    Hello from the other side! <b>Total: <span id="total"></span></b><br/>
    <button id="author">Sort by author</button>
    <button id="title">Sort by title</button>
    <table id="books" border="1">
        <tr>
            <th>
                Author
            </th>
            <th>
                Book Title
            </th>
        </tr>
    </table>
    <script src="index.js"></script>
</body>
</html>

Java脚本文件

    document.addEventListener("DOMContentLoaded", () => {
    processResponse(fetch("api/books"));
    document.getElementById("author").addEventListener("click", () =>{
        processResponse(fetch("api/books?sortby=author"))
    });
    document.getElementById("title").addEventListener("click", () =>{
        processResponse(fetch("api/books?sortby=title"))
    });
});
function processResponse(response) {
    let table = document.getElementById("books");
    let total = document.getElementById("total");
    response.then(data => data.json())
        .then(value => {
            table.innerHTML = "";
            const tr = document.createElement("tr");
            let th = document.createElement("th");
            th.innerHTML = "Author";
            tr.appendChild(th);
            th = document.createElement("th");
            th.innerHTML = "Book Title";
            tr.appendChild(th);
            table.appendChild(tr);
            for (let index = 0; index < value.books.length; index++) {
                const book = value.books[index];
                const tr = document.createElement("tr");
                let td = document.createElement("td");
                td.innerHTML = book.author;
                tr.appendChild(td);
                td = document.createElement("td");
                td.innerHTML = book.title;
                tr.appendChild(td);
                table.appendChild(tr);
            }
            total.innerHTML = value.total;
        });
}

server.js文件

    const fs = require('fs');
const express = require('express');
const app = express();
app.use(express.static("public"));
app.get("/", (req, res) => {
    res.sendFile("index.html", { root: __dirname + "/public" });
});
const apiRouter = express.Router();
apiRouter.get("/books", (req, res) => {
    let sortOrder = req.query["sortby"];
    fs.readFile("data/books.json", { encoding: 'utf8' }, (err, data) => {
        if (err) {
            console.error("ERROR is: ", err);
            return;
        }
        let books = JSON.parse(data);
        if (sortOrder === "author") {
            books.sort((a, b)=> a.author.localeCompare(b.author));
        } else if (sortOrder === "title") {
            books.sort((a, b)=> a.title.localeCompare(b.title));
        }
        res.send(JSON.stringify({
            books: books.slice(0, 50),
            total: books.length
        }));
    });
})
apiRouter.get("/books/title", (req, res) => {
    fs.readFile("data/books.json", { encoding: 'utf8' }, (err, data) => {
        if (err) {
            console.error("ERROR is: ", err);
            return;
        }
        let books = JSON.parse(data);
        let titles = books.map(book => book.title);
        res.send(JSON.stringify(titles));
    });
})
apiRouter.get("/books/author", (req, res) => {
    fs.readFile("data/books.json", { encoding: 'utf8' }, (err, data) => {
        if (err) {
            console.error("ERROR is: ", err);
            return;
        }
        let books = JSON.parse(data);
        let authors = books.map(book => book.author);
        res.send(JSON.stringify(authors));
    });
})

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

app.listen(8080, () => console.log('Example app listening on port 8080!'));
/*
And the books.json file that i guess you dont need so i wont post it.
My folder structure is:
Books > data Folder > books.json. 
Books > public Folder > index.html. 
Books > public Folder > index.js.
Books > server.js.
*/

好吧,如果将来对任何人都有帮助,这就是我要做的。这都是所有基本内容,但我是初学者,所以我们去了。打开命令提示。转到项目的目的地(index.js文件是(然后写:

$ npm init -y
$ npm install -g express-generator
$ npm install express -S
$ npm install connect -S
$ npm install serve-static -S

然后转到服务器的目的地。

$ node server.js

之后,我可以在浏览器键入http://localhost:8080/in the URL中运行页面。

如果您在Windows下方,请在本地IIS中创建一个新站点(如果还没有,则应在Windows组件中启用IIS(到您的项目文件夹。然后打开http://localhost:8080(或您可以在ISS中设置新网站的其他端口(

添加到脚本标签 type='text/javascript'

相关内容

最新更新