Javascript NodeJS-Express上的路由
我正在用Express在NodeJS中开发一个服务器,但是web结构有点复杂(我没有这样做,也不能更改它) 流程是这样的: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,所以
https://localhost/**{id}**
index.html
index.html
所在的同一级别或文件夹中创建更多的视图,只要客户希望开发它们
,甚至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,所以它不一样。谢谢你的回复!