0

在练习node的时候,打算搭建一个局域网访问的服务。
使用nodehttp模块。
启动后能加载本地的html文件但是对于cssjs文件无法加载。
请问我的写法对吗?

// 局域网访问
const http = require("http");
const fs = require("fs");
const contentType = {
  "html": "text/html",
  "htm": "text/html",
  "css": "text/css",
  "js": "application/javascript",
  "png": "image/png",
  "jpg": "image/jpeg",
  "xml": "text/xml",
  "json": "application/json",

}
let ROOT = "/worker/HoroyHomeApp-H5";
let server = http.createServer(function (request, response) {
  // 请求路径  
  let url = request.url;
  let file = ROOT + url;
  // 获取请求文件类型  
  let str = url.split(".");
  let type = str[str.length - 1];
  let resContentType = contentType[type] || 'text/plain';

  fs.readFile(file, function (err, data) {
    if (err) {
      response.writeHead(404, {
        "Content-Type": "application/json;charset=utf-8"
      });
      response.write(JSON.stringify({
        "err": err
      }))
      response.end;
    } else {
      response.writeHead(200, {
        "Content-Type": resContentType
      });
      response.write(data)
      response.end;
    }
  })

})
server.listen(8080, "192.168.100.18");
console.log("http://192.168.100.18:8080/html/index.html");
<!DOCTYPE html>
<html lang="zh-cn">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <div id="app">
    <button @click="handleclick">{{msg}}</button>
  </div>
  <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
  <script src="./demo.js"></script>
  <script type="text/javascript">
    var app = new Vue({
      el: '#app',
      data() {
        return {
          msg: "点击"
        }
      },
      methods: {
        handleclick() {
          console.log("ok");
        }
      }
    })
  </script>
</body>

</html>
// demo.js
console.log("demo.js");

启动服务后出现的情况是 demo.js 被阻断了。
图片描述
图片描述
单独打开http://192.168.100.18:8080/html/demo.js 文件是可以。
但是通过script 引入的js文件无法被执行。
一段时间后会出现如下错误:
图片描述

2019-04-03 提问
1

response.end() 没有结束

李十三 · 4月3日

展开评论
1 个回答
1

已采纳

response.end 是方法吧。应该这样response.end()
response.write()写入后未关闭连接,导致http挂起。所以后续的请求都挂起了。

撰写答案

推广链接