javascript - 使用 Node.js 接收 json 数据并写入文件的正确方法

标签 javascript node.js

我是 Node 新手,尝试从服务器请求一些 json 数据并将其保存到文件中。我可以毫无问题地接收数据,但在收到所有数据后无法弄清楚如何写入文件。我需要回调还是需要使用 http.CreateServer() ?任何有关此问题的帮助将不胜感激。

这是我到目前为止所拥有的:

"use strict";

const request = require('request');
const fs = require('fs');

var options = {
    url: 'url-to-request-data',
    method: 'GET',
    accept: 'application/json',
    json: true,} 
};

// Start the request
request(options, function(error, response, body) {
  if (error) { 
      return console.log(error); 
  } else {
        var path = "~/jsonfile.json";
        fs.writeFile(path, body);
  }
  });

最佳答案

您有几个问题。

fs.writeFile 采用第三个参数,即回调函数,它将通知您遇到的任何错误。

fs.writeFile(path, body, err => console.error(err));

在具有该文件路径的 *nix 系统上,您将收到错误:ENOENT:没有这样的文件或目录

~是一个bash扩展,node不知道用它做什么。

用途:

const os = require('os');
const path = require('path');

const filePath = path.join(os.homedir(), 'jsonfile.json');
fs.writeFile(path, body, err => console.error(err));

如果该 URL 返回 json,那么您将得到 [Object object] 写入 ~/jsonfile.json,正如您清楚的那样请求一个。

你必须解决:

  1. 删除 json: true
  2. 或者fs.writeFile(path, JSON.stringify(body), err =>/* ... */)

如果您只写入文件,最好的方法是使用streams

const filePath = path.join(os.homedir(), 'jsonfile.json');
request(options).pipe(fs.createWriteStream(filePath));
// See link for error handling

您可以在here中阅读有关请求和流以及如何处理错误的更多信息。

关于javascript - 使用 Node.js 接收 json 数据并写入文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50847482/

相关文章:

javascript - 更有效地编写 DIV 高度脚本

node.js - 使用 Restify 提供静态内容

node.js - 安装 NPM 包后将文件移至根目录

javascript - Node 原型(prototype)和异步

javascript - Web 应用程序的问题

javascript - 仅更新 ReactJS 状态项中的一项

javascript - 随机改变背景图片

javascript - Express 不会从一个 Controller 返回 HTTP 响应,但在其他 Controller 中会返回 HTTP 响应

node.js - ReactJS的环境设置

node.js - Node Lambda : Import of ts-node results in TypeError