2

コード

ノードの app.coffee ファイルに、アップロードを処理する次の coffee-script コードがあります。

app.post "/import", (req, res) ->
  console.log req.files
  fs.readFile req.files.displayImage.path, (err, data) ->
    newPath = __dirname + "/uploads/" + req.files.displayImage.name
    fs.writeFile newPath, data, (err) ->
      throw err  if err
      res.redirect "/"

JavaScript 変換では、次のように表示されます。

app.post("/import", function(req, res) {
  console.log(req.files);
  return fs.readFile(req.files.displayImage.path, function(err, data) {
    var newPath;
    newPath = __dirname + "/uploads/" + req.files.displayImage.name;
    return fs.writeFile(newPath, data, function(err) {
      if (err) {
        throw err;
      }
      return res.redirect("/");
    });
  });
});

Jade 形式のフォーム:

  form(action="", method="post", enctype="multipart/form-data")
    input(type="file", name="displayImage")
    input(type="submit", name="Upload")

コンソール出力からの req.files

ファイルデータは次のようになります。

{ displayImage: 
   { domain: null,
     _events: {},
     _maxListeners: 10,
     size: 1148,
     path: '/tmp/21096ac17833fa5e096f9e5c58a5ba08',
     name: 'package.json',
     type: 'application/octet-stream',
     hash: null,
     lastModifiedDate: Wed Jul 17 2013 22:04:58 GMT-0400 (EDT),
     _writeStream: 
      { _writableState: [Object],
        writable: true,
        domain: null,
        _events: [Object],
        _maxListeners: 10,
        path: '/tmp/21096ac17833fa5e096f9e5c58a5ba08',
        fd: null,
        flags: 'w',
        mode: 438,
        start: undefined,
        pos: undefined,
        bytesWritten: 1148,
        closed: true,
        open: [Function],
        _write: [Function],
        destroy: [Function],
        close: [Function],
        destroySoon: [Function],
        pipe: [Function],
        write: [Function],
        end: [Function],
        setMaxListeners: [Function],
        emit: [Function],
        addListener: [Function],
        on: [Function],
        once: [Function],
        removeListener: [Function],
        removeAllListeners: [Function],
        listeners: [Function] },
     open: [Function],
     toJSON: [Function],
     write: [Function],
     end: [Function],
     setMaxListeners: [Function],
     emit: [Function],
     addListener: [Function],
     on: [Function],
     once: [Function],
     removeListener: [Function],
     removeAllListeners: [Function],
     listeners: [Function] } }

質問

ただし、JSON ファイルの正しい MIME タイプは、上記のようapplication/jsonに表示されていることがわかります。これにより、タイプキーからタイプを確認できなくなります。アップロードされたファイルが Node JS で有効な JSON ファイルであるかどうかを確認する最良の方法は何ですか?application/octet-streamreq.files

トライ/キャッチ読み?または、Node 用のある種の lint プラグインですか? これに対する実際的なアプローチは何ですか?

4

1 に答える 1

9

サーバー側で JSON の解析を試みることができます。

function validateJSON(body) {
  try {
    var data = JSON.parse(body);
    // if came to here, then valid
    return data;
  } catch(e) {
    // failed to parse
    return null;
  }
}

そして、次のように使用できます。

var data = validateJSON('some potential json data');
if (data) {
  // valid!
}
于 2013-07-18T08:56:06.440 に答える