第一个参数必须是字符串类型或缓冲区或 uint8array 的实例。收到未定义

时间:2021-04-22 18:03:30

标签: javascript node.js web

我编写了这段代码,在我尝试了所有之后,它一直给我这个错误。

First argument must be of type string or an instance of buffer or uint8array. Received undefined

对不起,我是 Node.js 的新手,但我真的不知道我哪里出错了。感谢您的帮助。

function createServer(obj){
  var i;
  obj.port = (obj.port || 8080);
  obj.path = (obj.path || "/");

  http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/html'});
    for(i in obj.path){
      fs.readFile(i, "utf-8", (err, data) => {
        if(err){
          console.log(err);
        }
        res.write(data);
        res.end();
      })
    }
    
  }).listen(obj.port);

  return obj;
}

1 个答案:

答案 0 :(得分:0)

您的 index.js 文件 [https://github.com/notJudahRR/Firwe/blob/main/index.js] 将路径设置为对象:

const firwe = require("./src/index.js");

let server = firwe({
  port: 8080,
  path: {
    "/": "index.html"
  },
});
server.initServer();

然后,在 server.js [https://github.com/notJudahRR/Firwe/blob/main/src/server.js] 中,您必须适当处理:

const http = require("http");
const fs = require("fs");
const type = require("./type.js");

function createServer(obj) {
  var i;
  obj.port = obj.port || 8080;
  obj.path = obj.path || {
    "/": "index.html",
  };

  http
    .createServer((req, res) => {
      res.writeHead(200, { "Content-Type": "text/html" });
      Object.values(obj.path).forEach((v) => {
        fs.readFile(v, "utf-8", (err, data) => {
          if (err) {
            console.log(err);
          }
          res.write(data);
          res.end();
        });
      });
    })
    .listen(obj.port);

  return obj;
}

module.exports = createServer;

Object.values 在每个对象属性值中循环,然后您获得 index.html 以获取要呈现的文件。