我正在尝试将节点应用程序与MongoDB连接。当我得到输出时,代码似乎执行了 服务器在端口5000上运行 MongoDB数据库连接成功建立 在终端上 但是,当我尝试发布失眠症获得诊断信息时,大约需要两分钟 错误:服务器未返回任何内容(无标题,无数据)
const express = require('express');
//const bodyParser = require('body-parser');
const cors = require('cors');
const mongoose = require('mongoose');
require('dotenv').config();
const app = express();
const port = process.env.PORT || 5000;
app.use(cors());
app.use(express.json());
const uri = process.env.ATLAS_URI;
mongoose.connect( uri, {useUnifiedTopology: true, useNewUrlParser: true}, () => { console.log("MongoDB database conection established successfully")}).catch(err => console.log(err));
const exercisesRouter = require('./routes/exercises');
const usersRouter = require('./routes/users');
app.use('/exercises', exercisesRouter);
app.use('/users', usersRouter);
//emitter.setMaxListeners();
app.listen(port, () => {
console.log('Server is running on port : ' + port);
});
我正在关注一个教程,这些是我拥有的其他文件 exercise.model.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const exerciseSchema = new Schema({
username: {type: String,required: true},
description: {type: String,required: true},
duration: {type: Number,required: true},
date: {type: Date,required: true},
},
{
timestamps: true,
});
const Exercise = mongoose.model('Exercise', exerciseSchema);
module.exports = Exercise;
exercises.js
const router = require('express').Router();
let Exercise = require('../models/exercise.model');
router.route('/').get((req, res) => {
Exercise.find()
.then(exercises => res.json(exercises))
.catch(err => res.status(400).json('Error: ' + err));
});
router.route('/add').post((req, res) => {
const username = req.body.username;
const description = req.body.description;
const duration = Number(req.body.duration);
const date = Date.parse(req.body.date);
const newExercise = new Exercise({
username,
description,
duration,
date,
});
newExercise.save()
.then(() => res.json('Exercise added!'))
.catch(err => res.status(400).json('Error: ' + err));
});
module.exports = router;
users.js
const router = require('express').Router();
let User = require('../models/user.model');
router.route('/').get((req,res) => {
User.find()
.then(users => res.json(users))
.catch(err => res.status(400).json('Error: ' + err));
});
router.route('/add').post((req,res) => {
const username = req.body.username;
const newUser = new User({username});
newUser.save()
.then(() => res.join('User added!'))
.catch(err => res.status(400).json('Error: ' + err));
})
module.exports = router;
user.model.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
username: {
type: String,
required: true,
unique: true,
trim: true,
minlenght: 3
},
},{
timestamps: true,
});
const User = mongoose.model('User', userSchema);
module.exports = User;
当我在浏览器中转到http://localhost:5000时,在检查器错误中,我也收到Cannot GET /消息,它说拒绝加载图像'http://localhost:5000/favicon.ico',因为它违反了以下内容安全策略指令: “ default-src'none'”。请注意,未明确设置“ img-src”,因此将“ default-src”用作后备。这可能很多,但是我正在尝试学习如何将后端与前端连接起来,如果有人可以指导我,我将不胜感激。谢谢你。
答案 0 :(得分:0)
问题似乎与CORS有关。这意味着您创建的express API将不会接受来自其他域的调用,并且期望交互来自同一应用程序。当您使用失眠症(这是一个单独的桌面应用程序)时,Express会阻止对路线的访问。这是默认行为。
您需要抓住CORS middleware并根据需要设置路线。只需遵循文档即可。
允许所有访问的快速测试:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
app.get('/users', (req, res) => {...
...
答案 1 :(得分:0)
这是添加CORS的另一种方法
app.use(function (req, res, next) {
//Enabling CORS
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type,
Accept, x-client-key, x-client-token, x-client-secret, Authorization");
next();
});
答案 2 :(得分:0)
我也正在阅读同一教程:https://persistence.blazebit.com/documentation/core/manual/en_US/index.html#anchor-keyset-pagination
问题出在app.use(express.json());
对此进行评论,它将可以正常工作。但是,当您执行发布请求时,您将无法解析JSON数据。我不确定为什么express.json()不起作用。
但是无论哪种方式,您都可以使用Body-Parser来解决该问题。第一个用户npm i body-parser
将其安装到后端文件夹中的软件包管理器中。然后将以下代码复制到您的index.js
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({extended: true}))
app.use(bodyParser.json())
添加此代码,就可以了。这个答案给出了express.json和body-parser的详细说明。
express.json()是express中内置的一种方法,用于将传入的请求对象识别为JSON对象。
我建议使用body-parser(它是一个NPM软件包)来做同样的事情。它是由开发Express的同一位偷窥者开发的,旨在与Express配合使用。正文解析器曾经是express的一部分。