Я использую Nextjs и Express.js. Я разделяю корневую папку nextjs в папке приложения следующим образом:
app->pages->
-_app.js
-login.js
-index.js
Когда я добавлю это:
app.get('*', (req, res) => {
const parsedUrl = parse(req.url,true);
const {pathname, query = {} } = parsedUrl;
const route = routes[pathname];
/**
* Pull in front end routes and check request against those routes
*
*/
if(route){
return app.render(req,res,route.page,query);
}
handle(req, res) // for all the react stuff
});
Я получил такую ошибку:
Обратите внимание, что страницы будут компилироваться при первой их загрузке. готов в
http://localhost:3000 Ошибка типа [ERR_INVALID_ARG_TYPE]: «путь»
аргумент должен иметь тип string. Полученный тип объекта
в assertPath (path.js: 39: 11)
на extname (path.js: 835: 5)
в новом представлении (D: \ WEBSITE \ MENPRO \ TRACER-STUDY-NEXTJS \ node_modules \ express \ lib \ view.js: 57: 14)
в Function.render (D: \ WEBSITE \ MENPRO \ TRACER-STUDY-NEXTJS \ node_modules \ express \ lib \ application.js: 570: 12)
в app.get (D: \ WEBSITE \ MENPRO \ TRACER-STUDY-NEXTJS \ server \ index.js: 77: 24)
Но когда я уберу это: return app.render(req,res,route.page,query);
его работа снова.
Что происходит с этим?
полный код моего сервера :
const express = require('express');
const bodyParser = require('body-parser');
const next = require('next');
const passport = require('passport');
const session = require('express-session');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const keys = require('./config/keys');
const uuidv4 = require('uuid').v4;
// const path = require('path');
// const RouteAPI = require('./modules');
const dev = process.env.NODE_ENV !== 'production';
const PORT = process.env.PORT || 3000;
const nextApp = next({ dev, dir: "./app" });
const { parse } = require('url');
const handle = nextApp.getRequestHandler()
const getRoutes = require('./routes');
const routes = getRoutes();
nextApp.prepare().then(() => {
// express code here
const app = express();
app.use(session({
genid: function (req) {
return uuidv4() // use UUIDs for session IDs
},
name: keys.session.name,
secret: keys.session.secret,
resave: false,
saveUninitialized: true,
rolling: true,
cookie: {
secure: false,
httpOnly: true,
maxAge: keys.session.maxAge, // satu hari,
sameSite: true,
}
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(cookieParser());
app.disable('x-powered-by');
app.use(cors({ origin: keys.origin.url, credentials: true }))
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// app.use((req, res, next) => {
// res.header('X-XSS-Protection', '1; mode=block');
// res.header('X-Frame-Options', 'deny');
// res.header('X-Content-Type-Options', 'nosniff');
// res.header("Access-Control-Allow-Origin", keys.origin.url);
// next();
// })
// app.use('/api/', [
// RouteAPI.MahasiswaRoutes
// ]);
app.get('*', (req, res) => {
const parsedUrl = parse(req.url,true);
const {pathname, query = {} } = parsedUrl;
const route = routes[pathname];
/**
* Pull in front end routes and check request against those routes
*
*/
if(route){
return app.render(req,res,route.page,query);
}
handle(req, res) // for all the react stuff
});
app.listen(PORT, err => {
if (err) throw err;
console.log(`ready at http://localhost:${PORT}`)
});
})
// Server static assets if in production
Маршруты
module.exports = () =>{
return{
"/":{page:"/"},
"/login":{page:"/login"},
"/404":{page:"/404"}
};
};