如何在 Node.js 中提供客户端 JavaScript 模块

Nav*_*ghi 5 node.js

我是 Node.js 的新程序员。我尝试在 Node.js 中创建普通服务器。在我的客户端中,我使用了 ES6 模块。当我启动服务器并在浏览器中搜索 http://localhost:3000/ 时,加载了 HTML 和 CSS,但对于 javascript 有此错误:

在此输入图像描述

我有四个用于客户端的 javascript 模块,在 HTML 中我使用此代码来加载 javascript 模块:

<script type="module" src="js/controller.js" async></script>
Run Code Online (Sandbox Code Playgroud)

我的服务器代码:

const http = require('http');
const fs = require('fs');
const path = require('path');

const PORT = 3000;
const server = http.createServer();

server.on('request', (req, res) => {
    let routes = {
        'GET': {
            '/': indexHtml,
        }
    }
    console.log(req.url)
    let handler = routes[req.method][req.url];

    handler = handler || readFile;
    handler(req, res);
})

server.listen(PORT, () => {
    console.log(`Listening on port ${PORT}...`)
});

function indexHtml(req, res) {
    readFile({ url: '/index.html' }, res);
}

function readFile(req, res) {
    var filePath = path.join(__dirname, '../client/', req.url);
    // console.log(filePath)
    fs.readFile(filePath, (error, data) => {
        if (error) {
            res.writeHead(404);
            res.write('Not found error 404');
            res.end()
        } else {
            res.writeHead(200);
            res.write(data);
            res.end();
        }
    })
}

Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误并提供 javascript 模块,非常感谢您的帮助。

Nav*_*ghi 5

通过评论@derpirscher,我用以下代码更改了我的阅读器功能:

function readFile(req, res) {
    var filePath = path.join(__dirname, '../client/', req.url);

    fs.readFile(filePath, (error, data) => {
        if (error) {
            res.setHeader('Content-Type', 'text/html');
            res.writeHead(404);
            res.write('Not found error 404');
            res.end()
        } else {
            const url = req.url === '/' ? '/index.html' : req.url;
            if (req.url.includes('js')) res.setHeader('Content-Type', 'application/javascript');
            if (req.url.includes('css')) res.setHeader('Content-Type', 'text/css');
            if (req.url.includes('html')) res.setHeader('Content-Type', 'text/html');
            res.writeHead(200);
            res.write(data);
            res.end();
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

  • 评论不稳定。请解释一下这如何回答您的问题。请记住,Stack Overflow 主要面向未来的访问者。 (2认同)