【问题标题】:Load random html page Express.js加载随机 html 页面 Express.js
【发布时间】:2020-05-09 22:41:19
【问题描述】:

Nimit 这边,我的代码需要一些帮助。 那么我可以在同一个网址上加载不同的html页面吗 例如:www.xyz.com/home/random 可以随机超过1个html页面

task1.js 模拟。我有 task2.js,task3.js,task4.js 只是更改了 html 文件名。

//This is the root path!
const path = require("path");
const rootDir = require("../utils/path");

//express routing
const express = require("express");
const router = express.Router();

router.use("/random", (req, res, next) => {
  res.sendFile(path.join(rootDir, "views", "task_1.html"));
});

module.exports = router;

app.js

const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");

const app = express();

const homeRouter = require("./routes/homeRouter");
const taskRouter1 = require("./routes/task1");
const taskRouter2 = require("./routes/task2");
const taskRouter3 = require("./routes/task3");
const taskRouter4 = require("./routes/task4");
const errorRouter = require("./routes/error");

app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, "public")));

app.use(homeRouter);

// var ch = 1;
// switch (ch) {
//   case 1:
//     app.use(taskRouter.router1);
//     break;
//   case 2:
//     app.use(taskRouter);
//     break;
//   case 3:
//     app.use(taskRouter);
//     break;
//   case 4:
//     app.use(taskRouter);
//     break;
// }
task = Math.floor(Math.random() * 4);
console.log(task);
switch (task) {
  case 0:
    app.use(taskRouter1);
    break;
  case 1:
    app.use(taskRouter3);
    break;
  case 2:
    app.use(taskRouter3);
    break;
  case 3:
    app.use(taskRouter4);
    break;
}
app.use(errorRouter);
console.log("it has started!");

app.listen(1000);

所以事情是它只随机加载一个页面,刷新后它也会加载相同的页面。

【问题讨论】:

  • 使用单个路由器。将 4 个 url 加载到一个数组中。在运行时,从数组中随机选择一个 URL 并发送。
  • 谢谢你能帮我语法!

标签: javascript html express


【解决方案1】:

你也许可以使用这样的东西:

router.use("/random", (req, res, next) => {
  const task = Math.floor(Math.random() * 4);
  res.sendFile(path.join(rootDir, "views", `task_${task}.html`));
});

【讨论】:

  • 很高兴听到它对 @TheFlash 有帮助
【解决方案2】:

首先,将 URL 加载到数组中

const arrPaths = []
arrPaths[0] = "/public/task1.html"
arrPaths[1] = "/public/task2.html"

或者您可以使用文件系统搜索来填充它。这取决于您,但您可以这样做。只需填充您将从中随机选择的 arrPaths

然后我们设置快速路由器以在调用 GET /random 时响应

router.get("/random", (req, res) => {

现在我们需要随机选择一条路径

var chosenPath = arrPaths[Math.floor(Math.random() * (arrPaths.length))];  

生成0到arrPaths.length-1并抓取对应的arrPaths元素

然后我们将路径作为响应发送出去。

  res.sendFile(path.join(__dirname + chosenPath));
})

你的没用,因为你随机只做一次。为此,您需要在每次调用请求时生成随机元素。

【讨论】:

  • 我使用链接进入这个随机页面,所以我应该使用按钮,对吧?
  • 您可以使用类似的代码来组合按钮,是的,或者如果您使用的是引导程序,则将链接显示为按钮样式。但这严格处理 express.js 和 URL。 OTOH,请澄清你的意思。
  • 我使用的是 而不是 。这就是页面不刷新的原因。也许!还有如何在加载前刷新路线?
  • 你现在在说什么?
  • 兄弟这也有帮助!非常感谢啊啊啊啊!我只想做一些改变。我创建了新的目录实用程序和一个名为 path.js path.js const path = require("path"); 的文件module.exports = path.dirname(process.mainModule.filename);然后用 //This is the root path 编辑 router.js!常量路径 = 要求(“路径”); const rootDir = require("../utils/path");而不是 __dirname 我使用了 rootDir。提醒一下,再次感谢兄弟。
【解决方案3】:

home.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>MAIN</title>
  </head>
  <body>
    <a href="/random" method="GET">xyz</a>
  </body>
</html>

我做了一个设置,你也应该使用它。 创建一个新文件夹 utils,创建一个名为 path.js 的文件(这为您提供了根目录的路径。) path.js

const path = require("path");

module.exports = path.dirname(process.mainModule.filename);

所以这个问题有两个备选答案,我都会提到。

1。 task.js(在 express 中用作路由器)

//This is the root path!
const path = require("path");
const rootDir = require("../utils/path");

//express routing
const express = require("express");
const router = express.Router();

// router.use("/random", (req, res, next) => {
//   res.sendFile(path.join(rootDir, "views", "task.html"));
// });

router.use("/random", (req, res, next) => {
  const task = Math.floor(Math.random() * 4);
  console.log(task);
  res.sendFile(path.join(rootDir, "views", `task_${task}.html`));
});

module.exports = router;
  1. taskie.js

    const arrPaths = []; arrPaths[0] = "/views/task_0.html"; arrPaths[1] = "/views/task_1.html";

    const path = require("path"); const rootDir = require("../utils/path");

    const express = require("express"); 常量路由器 = express.Router();

    router.get("/random", (req, res) => { var selectedPath = arrPaths[Math.floor(Math.random() * arrPaths.length)]; console.log(chosenPath); res.sendFile(path.join(rootDir + selectedPath)); });

    module.exports = 路由器;

还有第三种选择,我不建议申请。如果你想知道,请ping我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2017-02-20
    • 2014-01-10
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多