我有此代码:
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));
});
我不能同时使用res.sendFile
和res.send
。如何在server.get
中同时使用两者?
如果我尝试这样的操作,它将仅执行第一个代码。
server.get("/chat", (req, res) => {
let query = url.parse(req.url, true).query;
console.log(query.channel);
let rueckgabe = {
channel: query.channel
};
res.send(JSON.stringify(rueckgabe));
});
server.get("/chat", (req, res) => {
res.sendFile('chat.html', { root: path.join(__dirname, 'public/') });
});
因此结果将是获得rueckgabe
,但没有html
页面。
答案 0 :(得分:1)
您不能在同一路由和方法中同时使用res.send()
和res.sendFile()
,因为每个请求只有一个响应,并且每个请求都被首先调用,这就是您的响应。
但是您可以使用不同的方法,首先发出ajax发布请求以进行“聊天”,并在回调中获取其“ rueckgabe”数据,然后转到“ / chat?data = something”之类的新路径。例如,将代码更改为此: (有关params的更多信息)
server.post("/chat/:channel", (req, res) => {
let query = req.params;
console.log(query.channel);
let rueckgabe = {
channel: query.channel
};
res.json(JSON.stringify(rueckgabe));
});
server.get("/chat", (req, res) => {
res.sendFile('chat.html', { root: path.join(__dirname, 'public/') });
});
您也可以通过这种方式使用它,但是这是一种扼杀的方法,因为现在您错过了您的rueckgabe
数据:
res.send(JSON.stringify(rueckgabe));
// "Warning:" use redirect after send is not routine and usual
res.redirect('/chat'); // redirect to chat with GET method
因此,通常在客户端进行处理并在响应回调中提出新请求。
答案 1 :(得分:0)
要在客户端获取参数,您需要使用此功能:
function searchToObject() {
var pairs = window.location.search.substring(1).split("&"),
obj = {},
pair,
i;
for ( i in pairs ) {
if ( pairs[i] === "" ) continue;
pair = pairs[i].split("=");
obj[ decodeURIComponent( pair[0] ) ] = decodeURIComponent( pair[1] );
}
return obj;
}
var urlParameters = searchToObject();
如果不需要服务器提供的url参数,则可以使用这种方法。
urlParameters
包含带有url参数的json对象。