在Node.JS中使用HTTP读取文件

时间:2016-01-16 15:17:44

标签: javascript node.js

在我的开发环境中,由于性能原因,我更喜欢从文件而不是实际的API读取数据。

我试着这样做:

var path = process.env.NODE_ENV === 'production' ? '/pathToExternalApi...' : process.env.pwd + '/assets/mockdata.json';

http.get(path, function (resFromApi, err) {

  var body = '';

  resFromApi.on('data', function (chunk) {
    //console.log(chunk);
    body += chunk;
  });

  resFromApi.on('end', function () {
    //console.log(resFromApi.statusCode + ' path:' + path);
    if (resFromApi.statusCode === 200) {
      cb(JSON.parse(body));
    } else {
      cb(null, 'Statuscode: ' + resFromApi.statusCode);
    }
  });
})

当我尝试对文件运行时,我得到404。我检查过路径是否正确。

我何时可以使用http.get()何时从文件中获取数据?我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

您无法使用http模块来读取本地文件。请改用fs模块,例如:

var fs = require("fs");
var file = fs.readFileSync("/assets/mockdata.json");
var mockdata = JSON.parse(file);

如果您的文件是JSON文件,那么您可以使用require()读取该文件并解析为JSON:

var mockdata = require("/assets/mockdata.json");

答案 1 :(得分:0)

该文件需要在服务器上可访问(作为URL)。 路径应该是Web相对路径或完整的http路径。另外,尝试添加.json mime-type或将文件重命名为yourfile.js而不是.json。

是的,如果它是nodejs,你可以使用文件系统,就像之前的评论一样。

答案 2 :(得分:0)

不,您无法直接使用http.get(file_path)。您可以使用静态Web服务器通过http提供文件,但这似乎是一个废话。

我会这样做:

if(process.env.NODE_ENV === 'production'){

    http.get("/pathToExternalApi", function (resFromApi, err) {

        var body = '';

        resFromApi.on('data', function (chunk) {
          //console.log(chunk);
          body += chunk;
        });

        resFromApi.on('end', function () {
          //console.log(resFromApi.statusCode + ' path:' + path);
          if(resFromApi.statusCode === 200){
            cb(JSON.parse(body));
          }else{
            cb(null, 'Statuscode: ' + resFromApi.statusCode);
          }
        });
    })

}else{
    fs.readFile(process.env.pwd + '/assets/mockdata.json',function(err,data){
        if(err)
            cb(null, 'Statuscode: ' + err.msg);
        else
            cb(JSON.parse(data));

    })
}