Node.js API在terminal中返回JSON,但不在浏览器中

有一个奇怪的问题。 一直在寻找答案,但没有出现。 我正在做一个节点的api教程,它会在我的terminal中从我的mongoDB数据库返回JSON,当我执行任何GET请求,但在我的浏览器或邮递员,我什么都没有回来,只有在terminal,我得到任何回应。 当我在邮递员尝试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!'); 

你有几个callback作为第一个参数的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)); } 

尝试一下,看看你是否真的遇到错误,然后再尝试输出答案。

https://nodejs.org/api/http.html#http_response_end_data_encoding_callback

响应结束方法不发送数据到响应套接字。 也许你改变它

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

如果你想closuressocket来做一些事情,你可以把callback结束。

 res.end(#logHandle()); 
 var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); var connect = function (databaseName, callback) { var url = 'mongodb://localhost:27017/' + databaseName; MongoClient.connect(url, function (error, database) { assert.equal(null, error); console.log("Successfully connected to MongoDB instance!"); callback(database); }) }; exports.find = function (databaseName, collectioName, query, callback) { connect(databaseName, function (database) { var collection = database.collection(collectioName); collection.find(query).toArray( function (err, documents) { assert.equal(err, null); console.log('MongoDB returned the following documents:'); console.dir(JSON.parse(JSON.stringify(documents))); //console.dir(documents); callback(null, documents); } ) database.close(); }) }; 

我想我们正在通过相同的教程,这是我的解决scheme'database.js',为我工作。