Sha*_*ary 0 mongoose node.js express express-router
我正在创建一个简单的博客后端(API)。
我尝试创建路由器,但现在遇到一个问题,我不明白如何调试。
这是路由器。
const express = require('express');
const Article = require('../models/Article')
let router = express.Router();
const app = require('../app');
router.get('/:articleId', (req,res) => {
Post.findOne({_id : req.params.articleId})
.then(doc => {
if(!doc) res.send('No such post in DB')
res.send(doc).sendStatus(200)
})
.catch(err => res.send({'error' : `you got some error - ${err}`}).sendStatus(400))
})
router.post('/', app.auth, async (req,res)=>{
if(req.auth) {
const doc = await User.findOne({uname : req.user});
const article = {
authorId : doc._id,
article : {
title : req.body.title,
content : req.body.article
},
tags : req.body.tags
}
const newArticle = new Article(article)
const savedArticle = await newArticle.save()
res.send(savedArticle)
}
else {
res.redirect('./login')
}
//if(localStorage.token) verify(token) get the userId and post the article with authorId = userId
//if (not verified) redirect to the login page
//get to know the jwt tokens
})
module.exports = { router };
Run Code Online (Sandbox Code Playgroud)
这是索引文件app.js。只是有问题的部分。我正在导出它并且auth在app.js.
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const env = require('dotenv').config();
const article = require('./routes/article')
app.use(express.json());
app.use(express.urlencoded({extended : true}));
mongoose.connect(process.env.MONGO_URL, {
useNewUrlParser: true,
useUnifiedTopology : true
}).then(() => {
console.log("Successfully connected to the database");
}).catch(err => {
console.log('Could not connect to the database. Exiting now...', err);
process.exit();
})
app.use("/article", article)
module.exports = {auth}
app.listen(port, ()=>{console.log(`Server running at port ${port}`)});
Run Code Online (Sandbox Code Playgroud)
这是文章的模型
const mongoose = require('mongoose');
const Article = new mongoose.Schema({
authorId : {
type : String,
required :true,
default : "anonymous"
},
article : {
title : {
type : String,
required : true
},
content : {
type : [String],
required : true
},
imgFiles : [String]
},
like : Number,
starred : Number,
date : {
type : Date,
required : true,
default : Date.now()
},
tags : [String]
})
module.exports = mongoose.model('Article', Article)
Run Code Online (Sandbox Code Playgroud)
提前致谢。
造成此问题的原因是您将article.js导入到app.js中,然后将app.js导入到article.js中,从而创建了循环依赖项。module.exports = {auth}从app.js中删除它。请注意,您甚至还没有声明 auth 函数。您应该在另一个文件中创建auth函数并将其导入到article.js 中。
另外这条线module.exports = { router };应该是module.exports = router;
auth.js
function auth(req, res, next) {
// IMplementation
}
module.exports = auth
Run Code Online (Sandbox Code Playgroud)
文章.js
const express = require('express');
let router = express.Router();
const auth = require('./auth');
router.get('/:articleId', (req,res) => {
res.send('article')
})
router.post('/', auth, async (req,res)=>{
res.send('response')
})
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
应用程序.js
const express = require('express');
const app = express();
const article = require('./article')
app.use(express.json());
app.use(express.urlencoded({extended : true}));
app.use("/article", article)
app.listen(3000, ()=>{console.log(`Server running at port 3000`)});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4870 次 |
| 最近记录: |