Как получить значение параметра URL в Node.js? - PullRequest
0 голосов
/ 12 декабря 2018

Например, у меня есть этот URL: http://localhost/chat.html?channel=talk Как я могу получить значение параметра channel в Node.js?Я хочу сохранить значение channel в переменной.

Я изменил server.get на это:

server.get("/channel", (req, res) => {
    let query = url.parse(req.url, true).query;
    console.log(req.query.channel);
    let rueckgabe = {
        channel: req.query.channel
    };
    res.send(JSON.stringify(rueckgabe));
});

Теперь я ожидаю вывод значения channel на моей консоли, но ничего не появляется.

Это полный код index.js:

//Server erstellen
const express = require("express");
let server = express();
server.use(express.static("public"));

//Socket.io
const http = require("http");
let httpServer = http.Server(server);
const socketIo = require("socket.io");
let io = socketIo(httpServer);

//Eventlistener bei Verbindungsaufbau
io.on("connection", (socket) => {
    console.log(socket.id);

    socket.on("chatnachricht", eingabe => {
        io.emit("nachricht", eingabe);
    });
});

let stdIn = process.openStdin();
stdIn.addListener("data", (eingabe) => {
    io.emit("nachricht", eingabe.toString());
});

server.get("/channel", (req, res) => {
    let query = url.parse(req.url, true).query;
    console.log(query);
    let rueckgabe = {
        channel: query.channel
    };
    //res.send(JSON.stringify(rueckgabe));
    res.send(JSON.stringify(rueckgabe));
});

httpServer.listen(80, () => {
    console.log("Server läuft");
});

РЕШЕНИЕ

Этот код работает пока, но с ограничениями:

//Server erstellen
const express = require("express");
let server = express();
server.use(express.static("public"));

const http = require("http");
let httpServer = http.Server(server);
const socketIo = require("socket.io");
let io = socketIo(httpServer);
var router = express.Router();
const url = require("url");
var path = require('path');


//Eventlistener bei Verbindungsaufbau
io.on("connection", (socket) => {
    console.log(socket.id);

    socket.on("chatnachricht", eingabe => {
        io.emit("nachricht", eingabe);
    });
});

/*
let stdIn = process.openStdin();
stdIn.addListener("data", (eingabe) => {
    io.emit("nachricht", eingabe.toString());
});
*/

server.get("/chat", (req, res) => {
    let query = url.parse(req.url, true).query;
    console.log(query.channel);
    let rueckgabe = {
        channel: query.channel
    };
    res.sendFile('chat.html', { root: path.join(__dirname, 'public/') });
    //res.send(JSON.stringify(rueckgabe));
});

httpServer.listen(80, () => {
    console.log("Server läuft");
});

Теперь он работает с server.get(), но я не могу использовать и res.sendFile('chat.html', { root: path.join(__dirname, 'public/') }); и res.send(JSON.stringify(rueckgabe));.Как я могу использовать оба?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Ну, вы упомянули для этого URL <a href="http://localhost/chat.html?channel=talk" rel="nofollow noreferrer">http://localhost/chat.html?channel=talk</a> вы не видите параметр канала на сервере.Это потому, что вы не достигли конечной точки, которую вы определили.

Копия вашего кода сверху

server.get("/channel", (req, res) => {
    let query = url.parse(req.url, true).query;
    console.log(req.query.channel);
    let rueckgabe = {
        channel: req.query.channel
    };
    res.send(JSON.stringify(rueckgabe));
});

Вы устанавливаете /channelURL здесь.В этой конфигурации, если вы хотите получить параметр запроса, вам нужно вызвать <a href="http://localhost" rel="nofollow noreferrer">http://localhost</a>:{portnumber}/channel?channel=somerandomvalue

Если вы хотите, чтобы URL /chat изменил вашу конфигурацию следующим образом:

server.get("/chat", (req, res) => {
    let query = url.parse(req.url, true).query;
    console.log(req.query.channel);
    let rueckgabe = {
        channel: req.query.channel
    };
    res.send(JSON.stringify(rueckgabe));
});

ивызовите <a href="http://localhost" rel="nofollow noreferrer">http://localhost</a>:{portnumber}/chat?channel=somerandomvalue

Если вы хотите использовать статический html, используя имя URL в качестве того же имени файла, вы можете сделать что-то вроде этого:

var router = express.Router();
var path = require('path');

router.get('/chat', function(req, res) {
    // where chat.html is in the public directory
    console.log(req.query.channel);
    res.sendFile('chat.html', { root: path.join(__dirname, '../public/') });
});
0 голосов
/ 12 декабря 2018

Похоже, вы используете Express Framework для Node.

Из документов можно получить доступ к параметрам строки запроса через req.query:

server.get("/channel", (req, res) => {
    let id = req.query.id; // where "id" is a paramter on the query string
}

А если вам нужен полный URL-адрес запроса:

server.get("/channel", (req, res) => {
    let fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...