gpt4 book ai didi

node.js - Node/Express 应用程序在与 MongoDB 交互时挂起,没有给出错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:14 25 4
gpt4 key购买 nike

我正在尝试在 NodeJS、Express 和 Mongodb 中创建 CRUD REST API。

我做了一些事情来破坏我的所有路线,他们不再返回响应。没有错误,控制台中没有任何内容,等等。我不确定发生了什么,我之前就可以正常工作。通过一些console.logs,我发现只要与数据库连接,它就会卡住。

现在,当我在 Postman 中发送发布请求时,它只是挂起“正在加载请求”。我将请求作为正文中的原始 JSON 和 application/json 的内容类型发送; header 中的 charset=UTF-8。

{"username":"zezimaUsername","rsn":"Zezima","avatar":"http://secure.runescape.com/m=avatar-rs/Zezima/chat.png"}

一旦与 Mongodb 交互,它们似乎都挂了。我让 Mongodb 使用 mongod --port 27017 在本地运行,并在 Mongodb Compass 中使用两个集合(用户和帖子)创建了数据库。

我在 db.js 文件中设置了我的数据库...

var mongoose = require('mongoose');
var url = 'mongodb://localhost:27017/my-group';
mongoose.connect(url);

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error: '));

module.exports = db;

并使用我的 server.js 启动我的应用程序...

var express = require('express');
var api = require('./api');
var app = express();

app.use(express.json());

app.use('/api', api);

//Error handling, don't return stack trace to user, log in console.
app.use(function (err, req, res, next){
console.log(err.stack);
res.status(500).send('Something went wrong, internal server error.');
});

app.listen(3000, function(){
console.log("Listening on port 3000");
});

并在我的 api.js 文件中定义我的路线...

var express = require('express');
var router = express.Router();
var User = require('./db/models/User');
var Post = require('./db/models/Post');

router.post('/register', function(req, res){
var user = new User(req.body);
user.save()
.then(function(item){
res.status(200).send({message: "User successfully created.", status: 200});
})
.catch(function(err){
res.status(400).send({message: "User failed to save to database", status: 400});
});
});

router.get('/user/:username', function(req, res){
var query = User.findOne({"username": req.params.username});
query.exec(function(err, user){
if(user === null){
res.status(404).send({message: "User not found", status: 404});
}else{
res.status(200).send(user);
}
});
});

router.post('/create_post', function(req, res){
var post = new Post(req.body);
post.save()
.then(function(item){
res.status(200).send({message: "Post successfully created.", status: 200});
})
.catch(function(err){
console.log(err);
res.status(400).send({message: "Post failed to save to database", status: 400});
});
});

router.get('/post/id/:id', function(req, res){
var query = Post.findOne({"_id":req.params.id});
query.exec(function(err, post){
if(post === null){
res.status(404).send({message: 'Post not found', status: 404});
}else{
res.status(200).send(post);
}
});
});

router.get('/post/boss/:boss', function(req, res){
var query = Post.find({"boss":req.params.boss});
query.exec(function(err, post){
if(post === null){
res.status(404).send({message: 'Post not found', status: 404});
}else{
res.status(200).send(post);
}
});
});

module.exports = router;

为了完整起见...我的模型看起来像...

用户.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
username:{
type: String,
required: true
},
rsn:{
type: String,
required: true
},
avatar:{
type: String,
required: true
},
posts:[{
type: Schema.Types.ObjectId,
ref: 'posts'
}]
});

var user = mongoose.model('users', userSchema);
module.exports = user;

和 Post.js

var mongoose = require('mongoose');
var shortid = require('shortid');
var Schema = mongoose.Schema;

var postSchema = new Schema({
_id:{
type: String,
default: shortid.generate
},
username:{
type: Schema.Types.ObjectId,
ref: 'users'
},
rsn:{
type: String,
required: true
},
avatar:{
type: String,
required: true
},
boss:{
type: String,
required: true
}
});

var post = mongoose.model('posts', postSchema);
module.exports = post;

我不确定发生了什么,我一直在阅读一堆各种教程和文档,但我只是没有看到我遇到的问题。

最佳答案

您的 server.js 文件中不需要 db.js 文件。

varexpress = require('express'); 之后需要它

let db = require("./db");

然后就可以正常工作了。

关于node.js - Node/Express 应用程序在与 MongoDB 交互时挂起,没有给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51697765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com