无法在Node.js应用中获取包含的js文件

时间:2018-12-30 09:31:57

标签: javascript node.js static

我有一个简单的纯Node.js应用程序。其结构如下:

enter image description here

The problem is I cannot get common.js properly.
The app.mjs consists of:
import http from 'http'
import fs from 'fs'
import nStatic from 'node-static'
import chalk from 'chalk'
import debug from 'debug'

const output = debug('app')

const fileServer = new nStatic.Server('./public')

const server = http.createServer((req, res) => {
  fileServer.serve(req, res)
  const Url = new URL(req.url, 'http://localhost:3000/')
  const fileExt = Url.pathname.split('/').pop().split('.').pop()
  let aType = ''

  switch (fileExt) {
    case 'ico':
      aType = 'image/vnd.microsoft.icon'
      break
    case 'js':
      aType = 'application/javascript'
      break
    case 'json':
      aType = 'application/json'
      break
    default:
      aType = 'text/html'
      break
  }
  res.writeHead(200, { 'Content-type': aType })

  const filePath = 'views/node.html'
  // using readFile
  fs.readFile(filePath, (err, content) => {
    if (err) {
      console.log('Error has occured: ', err)
      res.end(content)
    } else {
      res.end(content)
    }
  })
})

server.listen(3000, () => output(`Listen to me ${chalk.green('3000')}`))

启动后,它可以找到common.js

enter image description here

但返回views/index.html的内容,而不是脚本本身:

enter image description here

common.js

console.log('Common js here to help!')

它还会输出错误: enter image description here 因此,据说这很简单,但是我无法弄清楚到底是什么。

1 个答案:

答案 0 :(得分:-1)

每个请求都提供相同的文件。 这些行将始终以文件“ node.html”的内容进行响应。

const filePath = 'views/node.html'
fs.readFile(filePath, (err, content) => {
      res.end(content)
});

根据节点静态documentation,服务目录的正确方法是:

const http = require('http');
const NodeStatic = require('node-static');

const fileServer = new NodeStatic.Server('./public');

const server = http.createServer(function (request, response) {
    request.addListener('end', function () {
        fileServer.serve(request, response);
    }).resume();
});
server.listen(8080);