javascript - Node.js API 在终端中返回 JSON,但在浏览器中不返回

标签 javascript json node.js api monodevelop

遇到一个奇怪的问题。一直在寻找答案,但一无所获。我正在做一个 Node api 教程,当我执行任何 GET 请求时,它会从我的终端中的 mongoDB 数据库返回 JSON,但在我的浏览器或 postman 中我什么也没有得到,只有在终端中我才得到任何响应。当我在 postman 中尝试 POST 时,它说无法连接到后端。

这是我的代码:

var http = require('http');
var url = require('url');
var database = require('./database');


// Generic find methods (GET)

function findAllResources(resourceName, req, res) {
  database.find('OrderBase', resourceName, {}, function (err, resources) {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify(resources));
  });
};

var findResourceById = function (resourceName, id, req, res) {
  database.find('OrderBase', resourceName, {'_id': id}, function (err, resource) {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify(resource));
  });
};

// Product methods

var findAllProducts = function (req, res) {
  findAllResources('Products', req, res);
};

var findProductById = function (id, req, res) {
  findResourceById('Products', id, req, res);
};

// Generic insert/update methods (POST, PUT)

var insertResource = function (resourceName, resource, req, res) {
  database.insert('OrderBase', resourceName, resource, function (err, resource) {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify(resource));
  });
};

// Product methods

var insertProduct = function (product, req, res) {
  insertResource('OrderBase', 'Product', product, function (err, result) {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify(result));
  });
};


var server = http.createServer(function (req, res) {

  // Break down the incoming URL into its components
  var parsedURL = url.parse(req.url, true);

  // determine a response based on the URL
  switch (parsedURL.pathname) {
    case '/api/products':
    if (req.method === 'GET') {
      // Find and return the product with the given id
      if (parsedURL.query.id) {
        findProductById(id, req, res)
      }
      // There is no id specified, return all products
      else {
        findAllProducts(req, res);
      }
    }
    else if (req.method === 'POST') {

      //Extract the data stored in the POST body
      var body = '';
      req.on('data', function (dataChunk) {
        body += dataChunk;
      });
      req.on('end', function () {
        // Done pulling data from the POST body.
        // Turn it into JSON and proceed to store it in the database.
        var postJSON = JSON.parse(body);
        insertProduct(postJSON, req, res);
      });
    }
    break;
    default:
    res.end('You shall not pass!');
  }
});
server.listen(8080);

console.log('Up and running, ready for action!');

最佳答案

您有多个以 err 作为第一个参数的回调,但您没有处理任何潜在的错误。这意味着如果出现问题,您不会捕获它并返回错误。我不知道这是否与此有关,但作为一种实践(甚至不是“最佳”,而是一般实践)而不是这样做

function (err, resource) {
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify(resource));
  }

这样做

function (err, resource) {
  if(err){
    // do something to warn the client and stop here
  }
  res.writeHead(200, {'Content-Type': 'application/json'});
  res.end(JSON.stringify(resource));
  }

尝试一下,在尝试输出答案之前看看是否确实遇到了错误。

关于javascript - Node.js API 在终端中返回 JSON,但在浏览器中不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786896/

相关文章:

javascript - 请求全屏 HTML5 视频 onPlay

java - JsonDeserialize 在 objectmapper 读取值时也设置继承属性

javascript - 根据javascript中深层嵌套对象中的值过滤数组

javascript - Nodejs with multer 不通过postman工具上传文件

javascript - 我正在使用 Rails Admin gem,但我无法在不重新加载页面的情况下发布我的产品

javascript - 无法解析从 PHP 返回的 JSON

javascript - 通过具有请求速率限制器的 API 进行异步请求

javascript - 无法将数据(addRow)写入Nodejs中的Excel文件

javascript - Canvas - 如何从远处找到线上的点

javascript - 如何在 React Native 上访问数组状态或 json 数据?