Javascript NodeJS-Express上的路由

Javascript NodeJS-Express上的路由,javascript,node.js,express,url-routing,Javascript,Node.js,Express,Url Routing,我正在用Express在NodeJS中开发一个服务器,但是web结构有点复杂(我没有这样做,也不能更改它) 流程是这样的: 节点服务器接收类似https://localhost/**{id}** 收到的ID是所有文件(html、js、css、, 等)进行存储。默认情况下,它返回index.html 任何网站的文件结构都没有严格的逻辑,这意味着可以在index.html所在的同一级别或文件夹中创建更多的视图,只要客户希望开发它们 我遇到的问题是如何正确路由文件。因为我只在调用索引时才收到ID,所以

我正在用Express在NodeJS中开发一个服务器,但是web结构有点复杂(我没有这样做,也不能更改它)

流程是这样的:

  • 节点服务器接收类似
    https://localhost/**{id}**
  • 收到的ID是所有文件(html、js、css、, 等)进行存储。默认情况下,它返回
    index.html
  • 任何网站的文件结构都没有严格的逻辑,这意味着可以在
    index.html
    所在的同一级别或文件夹中创建更多的视图,只要客户希望开发它们
  • 我遇到的问题是如何正确路由文件。因为我只在调用索引时才收到ID,所以我不知道如何路由链接,比如
    ,甚至javascript文件调用
    ,因为它们也可能位于根目录或文件夹中(甚至两个东西同时存在)

    我的
    server.js
    文件:

    const express = require('express');
    const https = require('https');
    const fs = require('fs');
    const app = express();
    
    const config = require('./config');
    
    var webId;
    
    var options = {
      key: fs.readFileSync(config.paths.certificate.key),
      cert: fs.readFileSync(config.paths.certificate.crt),
      requestCert: false,
      rejectUnauthorized: false
    };
    
    app.use(function (req, res, next) {
      res.setHeader("Access-Control-Allow-Origin", "*");
      res.setHeader("Access-Control-Allow-Credentials", "true");
      res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS, POST, PUT");
      res.setHeader("Access-Control-Allow-Headers", "Accept, Access-Control-Allow-Headers, Access-Control-Request-Headers, Access-Control-Request-Method, Authorization, Content-Type, Origin, X-Requested-With");
      next();
    });
    
    app.get('/scripts/:script', function(req, res) {
      res.sendFile(req.params.script, {root: config.paths.webs + webId + '/scripts'});
    });
    
    app.get('/:script.js', function(req, res) {
      res.sendFile(req.params.script + '.js', {root: config.paths.webs});
    });
    
    // This routes correctly the index
    app.get('/:id', function(req, res) {
      webId = req.params.id;
      res.sendFile('index.html', {root: config.paths.webs + webId});
    });
    
    // This DID NOT work
    app.get('/:id/:page', function(req, res) {
      //Some code here...
    });
    
    https.createServer(options, app).listen(443, function() {
      console.log("NodeJS secure server started at port 443");
    });
    

    我也处于学习阶段。希望这会有所帮助

    app.get('/test/:id/:page', function(req, res, next) {
        let id = req.params.id;
        let page = req.params.page;
        console.log('The id: ' + id);
        console.log('The page: ' + page);
    });
    

    我终于得到了答案。似乎声明
    获取的顺序非常重要。此外,我还使用了正则表达式使其更通用

    /**
     * HTTP GET for files (.html, .js, etc.) from another folder level
     */
    app.get('/:id/:folder/:file', function(req, res) {    
      if (typeof(webId) === undefined) {
        webId = req.params.id; 
      }
      let folder = req.params.folder;
      let file = req.params.file;
    
      res.sendFile(file, {root: config.paths.webs + webId + '/' + folder});
    });
    
    /**
     * HTTP GET for .js files from the base path
     */
    app.get(/\/\w+.\b(js)/, function(req, res) {
      let lastBar = req.url.lastIndexOf('/');
      let script = req.url.substr(lastBar);
    
      res.sendFile(script, {root: config.paths.webs});
    });
    
    /**
     * HTTP GET for index page
     */
    app.get('/:id', function(req, res) {
      webId = req.params.id;
      res.sendFile('index.html', {root: config.paths.webs + webId});
    });
    
    /**
     * HTTP GET for view from base path
     */
    app.get('/:id/:page', function(req, res) {
      if (typeof(webId) === undefined) {
        webId = req.params.id; 
      }
      let page = req.params.page;
    
      res.sendFile(page, {root: config.paths.webs + webId});
    });
    

    我试过了,但没用。URL的第一部分,即放置
    /test/
    的地方,对我来说是dinamic,所以它不一样。谢谢你的回复!