将json从节点返回到客户端

时间:2018-07-25 14:58:42

标签: node.js express file-upload response multer

我有一个node.js和表达脚本,该脚本正在获取文件,在其上运行脚本并将stdout返回到控制台日志。我不想将标准输出记录到控制台,而是希望将输出(以JSON格式)发送回客户端以作为响应。我看到也许res.send是执行此操作的正确方法。这是正确的方法吗,这在我的代码中会到哪里去?

const multer = require('multer')
const fs = require('fs')
const exec = require('child_process').exec
const express = require('express')

var app = express();

const upload = multer({
    dest: './upload',
    fileFilter: function (req, file, cb) {
        if (file.mimetype != 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') {
            return cb(new Error('Wrong file type'))
        }
        cb(null,true)
    }
}).single('file');

app.post('/upload', upload, function(req, res) {

  const filePath = req.file.path
  exec(`./script.sh ${filePath}`,
      function (error, stdout, stderr) {
          console.log(stdout);
          if (error !== null) {
              console.log('exec error: ' + error);
          }
          res.setHeader('Content-Type', 'application/json');
          res.send(JSON.stringify({ test: 'test' }));
      });
});

1 个答案:

答案 0 :(得分:0)

通常,一种方法是:

res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ a: 1 }));

但是自Express.js 3x以来,响应对象具有json()方法,该方法可以为您正确设置所有标头并以JSON格式返回响应。

示例:

 res.json({"foo": "bar"});

作为参考:Proper way to return JSON using node or Express

在您的情况下,您可以尝试执行以下操作:

app.post('/upload', upload, function(req, res) {

const filePath = req.file.path
exec(`./script.sh ${filePath}`,
    function (error, stdout, stderr) {
      if (error !== null) {
          console.log('exec error: ' + error);
      } 
      res.json(stdout);
  });
});