我有一个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' }));
});
});
答案 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);
});
});