0
이 문제는 노드 6.9.4 및 7.0.0에서 발생하며 이유를 파악할 수 없습니다. 다른 버전에서는 테스트하지 않았습니다. 아래 Node.js 프로그램의 댓글을 참조하십시오.어휘 범위에서이 불일치가 발생하는 이유는 무엇입니까?
const express = require('express');
const adaro = require('adaro');
const app = express();
const tabs = require('./config/tabs.json');
const config = require('./config/locals.js');
function getLocals(name) {
const modifiedTabs = config.tabs.map(tab => {
return Object.assign(tab, {active: tab.name === name});
});
return Object.assign({tab: name}, config, {tabs: modifiedTabs});
}
app.engine('dust', adaro.dust());
app.set('view engine', 'dust');
app.set('x-powered-by', false);
app.use(express.static('static'));
tabs.map(tab => tab.name).forEach(name => {
const locals = getLocals(name);
const tab = locals.tabs.find(tab => tab.active);
// these are always true
console.log(tab === locals.tabs.find(tab => tab.active));
function callback(req, res) {
// const locals = getLocals(name);
// this should be true, but is false unless the line above is commented in
console.log(tab === locals.tabs.find(tab => tab.active));
res.render('main', locals);
}
if (tab.url !== '/' + tab.id) {
app.get(tab.url, callback);
}
app.get('/' + tab.id, callback);
});
app.all('*', function (req, res) {
res.sendStatus(404);
});
app.listen(process.env.PORT || 8000);
왜 이런 일이 일어나고 어떻게 해결할 수 있습니까?
로그 아웃'locals'와'getLocals (이름) '라인에서 당신이 주석했다. 내 생각 엔 당신이 다른 곳에 개체를 돌연변이시키고 그것을 실현시키지 않기 때문에 그들은 달라질 것입니다. – cdhowie
* facepalm * 방금 돌연변이를 발견했습니다 :'Object.assign (tab, {active : tab.name === name})'line 11 ... –