Node / Express:尝试将静态JSON文件发送到API端点

时间:2015-08-27 23:30:27

标签: json node.js express

我正在开发一个MEAN堆栈应用程序,我正在尝试创建一些Angular客户端可以$http.get的API端点,其中简单的JSON文件填充了虚拟数据。

这是{I}尝试使用以下内容的orders.json文件:

[
  {
    "order_status":"Shipped",
    "order_qty":30
  },
  {
    "order_status":"Shipped",
    "order_qty":6
  }
]

例如,api路由到$ http.get:

apiRouter.get('/:fileName', queries.getStaticJSONFileForDevelopment);

但是,当我尝试将快速sendFile方法与本地.json文件一起使用时,例如orders.json

queries.js:

exports.getStaticJSONFile = function(req, res) {

  var fileName = req.params.fileName;
  console.log('path: ' + path.normalize(__dirname + '/' + fileName));

  res.sendFile(path.normalize(__dirname + '/' + fileName), function(err) {
    if (err) return res.send({ reason:error.toString() });
  });
};

console.log告诉我,我指出了文件的正确路径,但Postman传达了这个错误:

TypeError: undefined is not a function
at Object.exports.getStaticJSONFile [as handle] (path/to/queries.js:260:7)
// queries.js:260:7 points to the 's' in 'sendFile' above

但是,当我只发送json数据时:

res.send([{"order_status":"Shipped","order_qty":30},{"order_status":"Shipped","order_qty":6}]);

...端点按照您的预期呈现数据。我是否试图让sendFile方法做一些它不应该做的事情,或者我有什么遗漏?非常感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

如果你想用json读取json文件和响应,那么你可以试试这个:

var jsonfile = require('jsonfile');

exports.getStaticJSONFile = function(req, res) {

  var fileName = req.params.fileName;
  var file = path.normalize(__dirname + '/' + fileName);
  console.log('path: ' + file);

  jsonfile.readFile(file, function(err, obj) {
    if(err) {
      res.json({status: 'error', reason: err.toString()});
      return;
    }

    res.json(obj);
  });
};