reactjs - 将代码从模板引擎更改为下一个 js
问题描述
如何将使用 .pug 制作的应用转换为下一个应用?我有一个使用 .pug 引擎的应用程序,我想将其转换为下一个。这是app.js
但我知道接下来是不同的我该怎么做?因为这里我的文件在视图中,而在视图中文件在页面中等等,我该怎么做?有什么办法还是我必须重新编码?
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
const middleware = require('./middleware')
const path = require('path')
const bodyParser = require("body-parser")
const mongoose = require("./database");
const session = require("express-session");
const http = require('http');
const server = app.listen(port, () => console.log("Server listening on port " + port));
const io = require("socket.io")(server, { pingTimeout: 60000 });
app.set("view engine", "pug");
app.set("views", "views");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "public")));
app.use(session({
secret: "#########",
resave: true,
saveUninitialized: false
}))
// Routes
const loginRoute = require('./routes/loginRoutes');
const registerRoute = require('./routes/registerRoutes');
const logoutRoute = require('./routes/logout');
const postRoute = require('./routes/postRoutes');
const profileRoute = require('./routes/profileRoutes');
const uploadRoute = require('./routes/uploadRoutes');
const searchRoute = require('./routes/searchRoutes');
const messagesRoute = require('./routes/messagesRoutes');
const notificationsRoute = require('./routes/notificationRoutes');
// Api routes
const postsApiRoute = require('./routes/api/posts');
const usersApiRoute = require('./routes/api/users');
const chatsApiRoute = require('./routes/api/chats');
const messagesApiRoute = require('./routes/api/messages');
const notificationsApiRoute = require('./routes/api/notifications');
app.use("/login", loginRoute);
app.use("/register", registerRoute);
app.use("/logout", logoutRoute);
app.use("/posts", middleware.requireLogin, postRoute);
app.use("/profile", middleware.requireLogin, profileRoute);
app.use("/uploads", uploadRoute);
app.use("/search", middleware.requireLogin, searchRoute);
app.use("/messages", middleware.requireLogin, messagesRoute);
app.use("/notifications", middleware.requireLogin, notificationsRoute);
app.use("/api/posts", postsApiRoute);
app.use("/api/users", usersApiRoute);
app.use("/api/chats", chatsApiRoute);
app.use("/api/messages", messagesApiRoute);
app.use("/api/notifications", notificationsApiRoute);
app.get("/", middleware.requireLogin, (req, res, next) => {
var payload = {
pageTitle: "Home",
userLoggedIn: req.session.user,
userLoggedInJs: JSON.stringify(req.session.user),
}
res.status(200).render("home", payload);
})
io.on("connection", socket => {
socket.on("setup", userData => {
socket.join(userData._id);
socket.emit("connected");
})
socket.on("join room", room => socket.join(room));
socket.on("typing", room => socket.in(room).emit("typing"));
socket.on("stop typing", room => socket.in(room).emit("stop typing"));
socket.on("notification received", room => socket.in(room).emit("notification received"));
socket.on("new message", newMessage => {
var chat = newMessage.chat;
if(!chat.users) return console.log("Chat.users not defined");
chat.users.forEach(user => {
if(user._id == newMessage.sender._id) return;
socket.in(user._id).emit("message received", newMessage);
})
});
})
解决方案
如果您不想将所有pug
模板引擎页面重构为 next.js 页面,则可以使这些pug
页面与 next.js 共存。您可以将 next.js 设为默认路由,并将 next.js 代码放在所有pug
页面路由之后。而且您还需要重构app.get("/", middleware.requireLogin, (req, res, next) => {...}
以确保 next.js 是默认路由。要应用此规则,您需要一个自定义 next.js 服务器。
示例代码
const express = require('express');
const next = require('next');
const port = 3000;
const dev = process.env.NODE_ENV !== 'production'; // use default NodeJS environment variable to figure out dev mode
const app = next({dev, conf});
const handle = app.getRequestHandler();
const server = express();
// all your pug page routes should be declared before `server.get('*'`.
server.get('*', authMiddleware(false), (req, res) => {
// pass through everything to NextJS
return handle(req, res);
});
app.prepare().then(() => {
server.listen(port, (err) => {
if (err) throw err;
console.log('NextJS is ready on http://localhost:' + port);
});
}).catch(e => {
console.error(e.stack);
process.exit(1);
});
推荐阅读
- asp.net - C# - 如何将单个 ListView 与来自 Sitefinity 的多个 DataSource 绑定
- ionic-framework - 使用 Ionic 输入的自动键盘
- javascript - Vue Router next 回调总是在 beforeEach 中调用
- prepared-statement - MemSQL:libmysql.dll 的客户端准备语句
- mysql - 查询和信号在同一个触发器中?
- rabbitmq - 弹簧 AMQP。交易信交换。将消息发送到原始队列
- ethereum - web3js 使用私钥对消息进行签名
- .net - XslCompiledTransform.Load(type):无法加载文件或程序集'System.Data.SqlXml
- c - 仅在 C 中验证字母输入
- postgresql - 如果一次运行多个事务,它们是否必须属于不同的连接?