Вы наткнулись на концепцию замыканий.Происходит то, что x
, который вы передаете своей функции, является не копией значения x
, а самой переменной x
(вроде указателя).Это означает, что все функции имеют одну и ту же переменную, поэтому одна переменная может иметь только одно значение.
Классический способ решить эту проблему - передать x
в качестве аргумента, тем самым нарушив замыкание:
for(var x in files){
dataFiles[x] = require(files[x].filepath);
dataNames[x] = files[x].name;
app.get('/'+dataNames[x]+files[x].ext,((new_x) => (req, res) => {
res.json(dataFiles[new_x])
})(x)); // <-- pass in x here to become new_x
}
ES6 представил концепцию let
, которая не создает замыкание.Поэтому более современное решение - просто использовать let
вместо var
:
for(let x in files){ // <-- this fixes it!!
dataFiles[x] = require(files[x].filepath);
dataNames[x] = files[x].name;
app.get('/'+dataNames[x]+files[x].ext,(req, res) => {
res.json(dataFiles[x])
});
}