javascript - 如何在 Node.js 中获取 URL 参数的值?

标签 javascript node.js express parameters

例如我有这个 URL:http://localhost/chat.html?channel=talk 如何在 Node.js 中获取参数 channel 的值? 我想将 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));。如何同时使用两者?

最佳答案

看起来您正在使用 Node.js 的 Express 框架。

From the docs ,查询字符串参数可以通过 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;
}

关于javascript - 如何在 Node.js 中获取 URL 参数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53749262/

相关文章:

node.js - Express.js 单选按钮作为使用渲染参数的表单发布方法

javascript - 无法读取 nodejs 中未定义的属性 'then'

javascript - 未获取数组的值,但数组存在 - JS

windows - 在 Windows 下安装 Node.js 是否有任何安全隐患?

node.js - Google Stackdriver 错误报告 API - 包括自定义数据

javascript - Express.js 处理不匹配的路由

javascript - 使用本地存储预填表格

javascript - getClientRects 不适用于 safari 或 chrome 中的图像

javascript - 使用浏览器控制台使用 Javascript 在 Facebook 中发送聊天消息

javascript - 在我的nodeJS应用程序中压平树上的空组