期待 'ID'、'STRING'、'NUMBER'、'BOOLEAN'、'UNDEFINED'、'NULL'、'DATA',得到 'INVALID'
Expecting 'ID', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', got 'INVALID'
我想获得我的 github 帐户的总星数,但是当我 运行 我的服务器客户端闪现一条错误消息:
... data-increment="{{ metadata[stargazers_
-----------------------^
Expecting 'ID', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', got 'INVALID'
我用过 express server,有 handlebars 渲染
function parseData(response, user) {
var checkLang = {};
const metadata = response.reduce(function(acc, currentItem) {
acc.stargazers_count += currentItem.stargazers_count;
if (checkLang[currentItem.language]) {
checkLang[currentItem.language] = checkLang[currentItem.language] + 1;
} else {
checkLang[currentItem.language] = 1;
}
return acc;
}, { stargazers_count: 0 });
metadata["languages"] = Object.keys(checkLang).map(item => {
return {
value: (checkLang[item] / response.length) * 100,
title: item
};
});
metadata["mainlanguage"] = Object.keys(checkLang).reduce(function(a, b) {
return checkLang[a] > checkLang[b] ? a : b;
});
return metadata;
}
route.get("/:id", function(req, res) {
axios
.get("https://api.github.com/users/" + req.params.id)
.then(user => {
axios
.get("https://api.github.com/users/" + req.params.id + "/repos")
.then(response => {
var getMetadata = parseData(response.data, user.data);
res.render("private", {
response: response.data,
user: user.data,
metadata: getMetadata
});
})
.catch((e) => {
console.log(e);
res.render("404");
});
})
.catch((e) => {
console.log(e);
res.render("404");
});
});
});
result.hbs
<div
class="meta-value numscroller"
data-max="{{ metadata.stargazers_count }}"
data-min="0"
data-delay="1"
data-increment="{{ metadata[stargazers_count] / 10 > 0 ? metadata[stargazers_count] / 10 : 1 }}"
>
{{ metadata.stargazers_count }}
</div>
我希望它显示总星数。
问题是由您的把手模板引起的。在属性 data-increment
中,您使用的是 metadata[stargazers_count]
,这会导致失败。
请注意,不建议在车把模板中放置大量逻辑。因此,为了解决您的问题,我会计算 increment
值并将其添加到您的 metadata
对象中,如下所示:
function parseData(response, user) {
var checkLang = {};
const metadata = response.reduce(function(acc, currentItem) {
acc.stargazers_count += currentItem.stargazers_count;
if (checkLang[currentItem.language]) {
checkLang[currentItem.language] = checkLang[currentItem.language] + 1;
} else {
checkLang[currentItem.language] = 1;
}
return acc;
}, { stargazers_count: 0 });
metadata["languages"] = Object.keys(checkLang).map(item => {
return {
value: (checkLang[item] / response.length) * 100,
title: item
};
});
metadata["mainlanguage"] = Object.keys(checkLang).reduce(function(a, b) {
return checkLang[a] > checkLang[b] ? a : b;
});
metadata.increment = metadata.stargazers_count / 10 > 0 ? metadata.stargazers_count / 10 : 1;
return metadata;
}
我正在添加一个 increment
属性,其中包含您尝试在车把模板中计算的值。
现在你的 handlebars 模板只需要使用这个属性:
<div
class="meta-value numscroller"
data-max="{{ metadata.stargazers_count }}"
data-min="0"
data-delay="1"
data-increment="{{ metadata.increment }}"
>
{{ metadata.stargazers_count }}
</div>
我想获得我的 github 帐户的总星数,但是当我 运行 我的服务器客户端闪现一条错误消息:
... data-increment="{{ metadata[stargazers_ -----------------------^ Expecting 'ID', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', got 'INVALID'
我用过 express server,有 handlebars 渲染
function parseData(response, user) {
var checkLang = {};
const metadata = response.reduce(function(acc, currentItem) {
acc.stargazers_count += currentItem.stargazers_count;
if (checkLang[currentItem.language]) {
checkLang[currentItem.language] = checkLang[currentItem.language] + 1;
} else {
checkLang[currentItem.language] = 1;
}
return acc;
}, { stargazers_count: 0 });
metadata["languages"] = Object.keys(checkLang).map(item => {
return {
value: (checkLang[item] / response.length) * 100,
title: item
};
});
metadata["mainlanguage"] = Object.keys(checkLang).reduce(function(a, b) {
return checkLang[a] > checkLang[b] ? a : b;
});
return metadata;
}
route.get("/:id", function(req, res) {
axios
.get("https://api.github.com/users/" + req.params.id)
.then(user => {
axios
.get("https://api.github.com/users/" + req.params.id + "/repos")
.then(response => {
var getMetadata = parseData(response.data, user.data);
res.render("private", {
response: response.data,
user: user.data,
metadata: getMetadata
});
})
.catch((e) => {
console.log(e);
res.render("404");
});
})
.catch((e) => {
console.log(e);
res.render("404");
});
});
});
result.hbs
<div
class="meta-value numscroller"
data-max="{{ metadata.stargazers_count }}"
data-min="0"
data-delay="1"
data-increment="{{ metadata[stargazers_count] / 10 > 0 ? metadata[stargazers_count] / 10 : 1 }}"
>
{{ metadata.stargazers_count }}
</div>
我希望它显示总星数。
问题是由您的把手模板引起的。在属性 data-increment
中,您使用的是 metadata[stargazers_count]
,这会导致失败。
请注意,不建议在车把模板中放置大量逻辑。因此,为了解决您的问题,我会计算 increment
值并将其添加到您的 metadata
对象中,如下所示:
function parseData(response, user) {
var checkLang = {};
const metadata = response.reduce(function(acc, currentItem) {
acc.stargazers_count += currentItem.stargazers_count;
if (checkLang[currentItem.language]) {
checkLang[currentItem.language] = checkLang[currentItem.language] + 1;
} else {
checkLang[currentItem.language] = 1;
}
return acc;
}, { stargazers_count: 0 });
metadata["languages"] = Object.keys(checkLang).map(item => {
return {
value: (checkLang[item] / response.length) * 100,
title: item
};
});
metadata["mainlanguage"] = Object.keys(checkLang).reduce(function(a, b) {
return checkLang[a] > checkLang[b] ? a : b;
});
metadata.increment = metadata.stargazers_count / 10 > 0 ? metadata.stargazers_count / 10 : 1;
return metadata;
}
我正在添加一个 increment
属性,其中包含您尝试在车把模板中计算的值。
现在你的 handlebars 模板只需要使用这个属性:
<div
class="meta-value numscroller"
data-max="{{ metadata.stargazers_count }}"
data-min="0"
data-delay="1"
data-increment="{{ metadata.increment }}"
>
{{ metadata.stargazers_count }}
</div>