nodejsで動作し、sqlite3データベースで動作するJSスクリプトを書きたいと思います。計画は、データベースからデータを取得し、「スクリプト」タグで囲むことです。私のスニペットは次のとおりです。
var sqlite3 = require('sqlite3');
var db = new sqlite3.Database('/var/www/db/js.sqlite');
var MyRandomCode =
{
code: "<script>"
}
function appendToCode(snippet) {
MyRandomCode.code += snippet;
}
function printMe() {
console.log(MyRandomCode.code);
}
function closeCode() {
MyRandomCode.code += "</script>";
}
printMe();
randomNode("defun", MyRandomCode);
printMe();
closeCode();
function randomNode(name, MyRandomCode) {
db.get("SELECT tag_value FROM tags WHERE tag_name=\"" + name + "\"", function(err, rows) {
if (err) throw err;
appendToCode(rows['tag_value']);
});
}
データベースには、「テスト」機能の実装のみが含まれています。期待される結果は次のとおりです。
<script>
function test() {
a = 5;
c += a + b;
"foo";
var foo = 5;
const bar = 6, baz = 7;
switch ("foo") {
case "foo":
return 1;
case "bar":
return 2;
}
for (var i = 0; i < 5; ++i) {
console.log("Hello " + i);
}
for (var i in [ 1, 2, 3 ]) {
console.log(i);
}
for (var i = 0; i < 5; ++i) console.log("foo");
}
</script>
これにもかかわらず、私は得た
<script></script>function test() {
a = 5;
c += a + b;
"foo";
var foo = 5;
const bar = 6, baz = 7;
switch ("foo") {
case "foo":
return 1;
case "bar":
return 2;
}
for (var i = 0; i < 5; ++i) {
console.log("Hello " + i);
}
for (var i in [ 1, 2, 3 ]) {
console.log(i);
}
for (var i = 0; i < 5; ++i) console.log("foo");
}
文字列の順序が変更される理由がわかりません。関数文字列が「script」タグ内にないのはなぜですか?