无法使用 Express NodeJS 和 MongoDB 从 API 检索数据,正在加载 [英] Unable to retrieve data from API using Express NodeJS and MongoDB, loading
问题描述
我正在尝试使用 Node.js、Express 和 MongoDB 创建一个 Rest API.我目前在我的本地主机上运行:3000.当我尝试重新启动并运行服务器时,我正在使用路由 http://localhost:3000/drinks
I'm attempting to create a Rest API using Node.js, Express, and MongoDB. I am currently running on my local host :3000. When I try to restart and run the server I am using the route http://localhost:3000/drinks
我使用 Postman 发送 HTTP 请求.https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=zh_CN
I use Postman to send HTTP requests. https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en
在尝试发送上面的路由时,它没有检索到任何信息.它只是继续加载.
While trying to send the route above, it does not retrieve any information. It just continues load.
这是我第一次创建 REST API,我不确定为什么它不检索数据.下面附上我的代码.提前致谢!
This is my first time creating a REST API and I'm not sure why it isn't retrieving the data. Attached below is my code. Thanks in advance!
server.js
var express = require('express'),
drink = require('./routes/drinks');
var app = express();
app.configure(function () {
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());
});
app.get('/drinks', drink.findAll);
app.get('/drinks/:id', drink.findById);
app.listen(3000);
console.log('Listening on port 3000...');
drinks.js
var mongo = require('mongodb');
var Server = mongo.Server,
Db = mongo.Db,
BSON = mongo.BSONPure;
var server = new Server('localhost', 27017, {auto_reconnect: true});
db = new Db('drinkdb', server);
db.open(function(err, db) {
if(!err) {
console.log("Connected to 'drinkdb' database");
db.collection('drinks', {strict:true}, function(err, collection) {
if (err) {
console.log("The 'drinks' collection doesn't exist. Creating it with sample data...");
populateDB();
}
});
}
});
exports.findById = function(req, res) {
var id = req.params.id;
console.log('Retrieving drink: ' + id);
db.collection('drinks', function(err, collection) {
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {
res.send(item);
});
});
};
exports.findAll = function(req, res) {
db.collection('drinks', function(err, collection) {
collection.find().toArray(function(err, drinks) {
res.send(drinks);
});
});
};
/*---------------------------------------------------------------------------------------------------------------*/
// Populate database with sample data -- Only used once: the first time the application is started.
// You'd typically not find this code in a real-life app, since the database would already exist.
var populateDB = function() {
var drinks = [
{
id: "1",
name: "Margarita",
ingredients: ["Tequila","Lime juice","Triple Sec","Lime","Salt","Ice"],
measurements: ["2 oz","1 oz","1 oz","1","optional","optional"],
directions: "Shake the other ingredients with ice, then carefully pour into the glass. Served: On the roc\
ks; poured over ice. Optional: Salt the rim of the glass by rubbing lime on it so it sticks."
},
{
id: "2",
name: "Strawberry Margarita",
ingredients: ["Tequila", "Lime juice","Triple Sec","Strawberries","Lime","Salt", "Ice"],
measurements: ["2 oz","1 oz", "1 oz", "3 1/2 cups", "1", "optional", "optional"],
directions: "Combine strawberries, ice, tequila, lime juice, and triple sec in a blender, and process unt\
il the mixture is smooth. Carefully pour into the glass. Served: On the rocks; poured over ice. Optional: Salt the ri\
m of the glass by rubbing lime on it so it sticks."
}];
db.collection('drinks', function(err, collection) {
collection.insert(drinks, {safe:true}, function(err, result) {});
});
};
警告是:
express deprecated app.configure: Check app.get('env') in an if statement server.js:6:5
connect deprecated multipart: use parser (multiparty, busboy, formidable) npm module instead node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:56:20
connect deprecated limit: Restrict request size at location of read node_modules/express/node_modules/connect/lib/middleware/multipart.js:86:15
推荐答案
我认为 Ashley 走在正确的轨道上.但是为了更清楚地说明问题发生在哪里,请尝试使用以下内容作为指南:http://expressjs.com/en/guide/routing.html
I think Ashley is on the right track. But to make it more clear where the problem is happening try using this as a guide: http://expressjs.com/en/guide/routing.html
app.get('/drinks', function (req, res) {
drink.findAll(req, res);
});
然后您可以在此调用和 findAll 函数之间添加登录.
Then you can add logging in between this call and in your findAll function.
这篇关于无法使用 Express NodeJS 和 MongoDB 从 API 检索数据,正在加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!