我正在使用NextJS / MERN堆栈。我的NextJS正在使用我的server.js文件,以及为我的API导入路由。当触发来自Postman或浏览器的API调用时,这些路由似乎正在活动,因为它们确实显示了活动。但是,这是活动停止的地方。据我所知,它没有通过Model.find()函数。我不确定这是否与Next js和server.js中的prepare方法有关,或者是否与bodyparser问题有关。
这是我的server.js
const express = require("express");
const urlObject = require('./baseURL')
const passport = require("./nextexpress/config/passport-setup");
const passportSetup = require("./nextexpress/config/passport-setup");
const session = require("express-session");
const authRoutes = require("./nextexpress/routes/auth-routes");
const KBRoutes = require("./nextexpress/routes/kb-routes");
const userRoutes = require('./nextexpress/routes/user-routes')
const pollRoutes = require('./nextexpress/routes/poll-routes')
const mongoose = require("mongoose");
const cookieParser = require("cookie-parser"); // parse cookie header
const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const nextapp = next({ dev })
const handle = nextapp.getRequestHandler()
const bodyParser = require('body-parser');
// mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/kb', { useNewUrlParser: true });
mongoose.connect('mongodb://localhost:27017/kb')
console.log(process.env.MONGODB_URI)
const connection = mongoose.connection;
const baseURL = urlObject.baseURL
const PORT = process.env.PORT || 3000
connection.once('open', function () {
console.log("MongoDB database connection established successfully");
})
nextapp.prepare().then(() => {
const app = express();
console.log(process.env.PORT, '----port here ----')
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/api/auth", authRoutes);
app.use("/api/kb", KBRoutes);
app.use('/api/user', userRoutes)
app.use('/api/poll', pollRoutes)
app.get('/posts/:id', (req, res) => {
return nextapp.render(req, res, '/article', { id: req.params.id })
})
app.get('/redirect/:id', (req, res) => {
return nextapp.render(req, res, '/redirect')
})
app.all('*', (req, res) => {
return handle(req, res)
})
app.listen(PORT, err => {
if (err) throw err
console.log(`> Ready on http://localhost:${PORT}`)
})
})
// connect react to nodejs express server
以及相关路线:
KBRoutes.get('/', (req, res) => {
console.log(KB.Model)
KB.find({}, (err, photos) => {
res.json(kbs)
})
})
我能够到达每条路线。在此之前,当我将NextJS React部分拆分到一个单独的域中时,因此要单独的server.js文件。一旦我介绍了NextJs,多数民众赞成在何时出现此问题。任何帮助将不胜感激。
最佳答案
似乎相关路由正在尝试返回json(kbs),但kbs似乎没有定义。返回查找查询的结果对我来说更有意义,包括一个不错的错误捕获器和一些良好实践状态。捕获错误应该告诉您出了什么问题,无论如何,我都希望控制台中出现错误,这将有助于我们进一步找到答案。
KB.find({}, (err, photos) => {
if (err) res.status(401).send(err)
res.status(200).json(photos)
})
关于javascript - 路由器未在Express应用中触发.find或.findByID。也使用nextjs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59170958/