如何在 Express 路由中设置 Next.js 渲染?
How to set up Next.js render in Express routing?
app.js
const express = require('express');
const next = require('next');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app
.prepare()
.then(() => {
const server = express();
const indexRouter = require('./routes/indexRouter');
server.use(indexRouter);
server.all('*', (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
console.log('> Ready on http://localhost:' + port);
});
})
.catch((ex) => {
console.error(ex.stack);
process.exit(1);
});
indexRoutes.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/user');
router.post('/api/signup', userController.signup);
我想在 indexRoutes.js
中通过 Next.js 渲染组件。我看到其他人主要 app.js
.
server.get('/login', (req, res) => {
app.render(req, res, '/login');
});
但我不明白如何在单独的文件中完成它。我尝试这样做,但没有结果。
indexRoutes.js
const express = require('express');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const router = express.Router();
const userController = require('../controllers/user');
router.post('/api/signup', userController.signup);
router.get('/login', (req, res) => {
return app.render(req, res, '/login'); // this does not work
});
我该如何解决我的问题?
如果您想将路由放在单独的文件中,您可以创建以下 indexRouter.js
文件:
// routes/indexRouter.js
const userController = require('../controllers/user');
const indexRouter = (server, app) => {
server.post('/api/signup', userController.signup);
server.get('/login', (req, res) => {
return app.render(req, res, '/login');
});
};
module.exports = indexRouter;
然后您可以从 app.js
请求它并将 server
和 app
对象传递给它。
// app.js
// ...
app
.prepare()
.then(() => {
const server = express();
const indexRouter = require('./routes/indexRouter');
indexRouter(server, app)
server.all('*', (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
console.log('> Ready on http://localhost:' + port);
});
})
.catch((ex) => {
console.error(ex.stack);
process.exit(1);
});
app.js
const express = require('express');
const next = require('next');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app
.prepare()
.then(() => {
const server = express();
const indexRouter = require('./routes/indexRouter');
server.use(indexRouter);
server.all('*', (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
console.log('> Ready on http://localhost:' + port);
});
})
.catch((ex) => {
console.error(ex.stack);
process.exit(1);
});
indexRoutes.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/user');
router.post('/api/signup', userController.signup);
我想在 indexRoutes.js
中通过 Next.js 渲染组件。我看到其他人主要 app.js
.
server.get('/login', (req, res) => {
app.render(req, res, '/login');
});
但我不明白如何在单独的文件中完成它。我尝试这样做,但没有结果。
indexRoutes.js
const express = require('express');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const router = express.Router();
const userController = require('../controllers/user');
router.post('/api/signup', userController.signup);
router.get('/login', (req, res) => {
return app.render(req, res, '/login'); // this does not work
});
我该如何解决我的问题?
如果您想将路由放在单独的文件中,您可以创建以下 indexRouter.js
文件:
// routes/indexRouter.js
const userController = require('../controllers/user');
const indexRouter = (server, app) => {
server.post('/api/signup', userController.signup);
server.get('/login', (req, res) => {
return app.render(req, res, '/login');
});
};
module.exports = indexRouter;
然后您可以从 app.js
请求它并将 server
和 app
对象传递给它。
// app.js
// ...
app
.prepare()
.then(() => {
const server = express();
const indexRouter = require('./routes/indexRouter');
indexRouter(server, app)
server.all('*', (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
console.log('> Ready on http://localhost:' + port);
});
})
.catch((ex) => {
console.error(ex.stack);
process.exit(1);
});