Переадресация Nodejs Express на разделяемый уникальный URL-адрес с работающим клиентским JS - PullRequest
0 голосов
/ 02 ноября 2019

Я использую Express в Node и хочу сделать следующее:

Если пользователь заходит на страницу (привет) или новый URL, который никогда не существовал (привет / wxyz4321)

  • Получает перенаправление на ту же страницу, но с уникальным URL-адресом, который может быть передан другим (hi / abcd1234)
  • "abcd1234" добавляется в массив с именем URLS

Вот коды:

const express = require('express');
const app = express();
const http = require('http').Server(app);
const nanoid = require('nanoid');
const fs = require('file-system');
var URLS = [];
var ID = nanoid();
app.use(express.static(__dirname + "/public"))
app.use("/styles",  express.static(__dirname + '/public/css'));
app.use("/scripts", express.static(__dirname + '/public/js'));
app.get('/',function(req,res){
    res.sendFile(path.join(__dirname+'/public/index.html'));
});

app.get("/*", function(req, res){
    var origin= req.url.slice(-21);
    //-21 because that is the length of nanoid generated
    if(URLS.includes(origin)===false){
        URLS.push(ID);
        fs.copyFileSync('public/index.html', "public/"+randomID+".html");
        //Creates a new html file with the name of ID
        //But res.redirect(__dirname + "/public/randomID"); does not work
    }
});

Заранее спасибо.

1 Ответ

0 голосов
/ 03 ноября 2019

Хорошо, я, наверное, нашел свой ответ. Мое перенаправление работает, но Chrome блокирует мне загрузку локального ресурса, поэтому мне нужно будет развернуть его на сервере, чтобы быть на 100% уверенным. Это перенаправило меня на Google и другие существующие сайты.

const express = require('express');
const app = express();
const http = require('http').Server(app);
const nanoid = require('nanoid');
const fs = require('file-system');
var URLS = [];
var ID = nanoid();
//app.use(express.static(__dirname + "/public"))
//I removed this line, because redirect will not work if user comes to index.html
app.use("/styles",  express.static(__dirname + '/public/css'));
app.use("/scripts", express.static(__dirname + '/public/js'));
//Retaining these two lines, because these lines where the css and js are kept

app.get("/*", function(req, res){
    var origin= req.url.slice(-21);
    //-21 because that is the length of nanoid generated
    if(URLS.includes(origin)===false){
        URLS.push(ID);
        fs.copyFileSync('public/index.html', "public/"+randomID+".html");
        //Creates a new html file with the name of ID
        var destination = '<script>window.location.href=' + '"' + __dirname + "/public/"+ randomID + '";</script>';
        //var destination = '<script>window.location.href=' + '"' +"https://www.google.com.my/imghp?hl=en&tab=wi&ogbl"+ '";</script>';
        //Since this line worked, it will probably work if I test this on a real server
        res.send(destination);
        //Redirects to the newly created html file
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...