質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

350閲覧

socket.ioという非同期通信の中でsqlite3という非同期通信を使おうとするとなぜ先にsocket.ioが先に実行されるのか

richa

総合スコア0

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/11/13 12:58

前提

現在テストで簡易的なログイン画面を作っています
正しいログイン名とパスワードを入力するとログインできるようにしたいのですが
socket.ioの中でsqlite3を実行しようとすると先にsoket.ioが行われた後、sqliteのコードが実行されてしまうのですが
これはどういう仕組みなのかがわかりません
socket.ioという非同期通信の仕組みの中でsqlite3という非同期通信の仕組みを入れると
なぜsocket.ioが先に実行されるのかしりたいです

実現したいこと

socket.ioの中でsqlite3のコードを実行して、変数brackをtrueにして
URLを書き換え、画面をログイン成功画面に推移できるようにしたい

発生している問題・エラーメッセージ

<ref *1> [Function: app] {
_events: [Object: null prototype] { mount: [Function: onmount] },
_eventsCount: 1,
_maxListeners: undefined,
setMaxListeners: [Function: setMaxListeners],
getMaxListeners: [Function: getMaxListeners],
emit: [Function: emit],
addListener: [Function: addListener],
on: [Function: addListener],
prependListener: [Function: prependListener],
once: [Function: once],
prependOnceListener: [Function: prependOnceListener],
removeListener: [Function: removeListener],
off: [Function: removeListener],
removeAllListeners: [Function: removeAllListeners],
listeners: [Function: listeners],
rawListeners: [Function: rawListeners],
listenerCount: [Function: listenerCount],
eventNames: [Function: eventNames],
init: [Function: init],
defaultConfiguration: [Function: defaultConfiguration],
lazyrouter: [Function: lazyrouter],
handle: [Function: handle],
use: [Function: use],
route: [Function: route],
engine: [Function: engine],
param: [Function: param],
set: [Function: set],
path: [Function: path],
enabled: [Function: enabled],
disabled: [Function: disabled],
enable: [Function: enable],
disable: [Function: disable],
acl: [Function (anonymous)],
bind: [Function (anonymous)],
checkout: [Function (anonymous)],
connect: [Function (anonymous)],
copy: [Function (anonymous)],
delete: [Function (anonymous)],
get: [Function (anonymous)],
head: [Function (anonymous)],
link: [Function (anonymous)],
lock: [Function (anonymous)],
'm-search': [Function (anonymous)],
merge: [Function (anonymous)],
mkactivity: [Function (anonymous)],
mkcalendar: [Function (anonymous)],
mkcol: [Function (anonymous)],
move: [Function (anonymous)],
notify: [Function (anonymous)],
options: [Function (anonymous)],
patch: [Function (anonymous)],
post: [Function (anonymous)],
propfind: [Function (anonymous)],
proppatch: [Function (anonymous)],
purge: [Function (anonymous)],
put: [Function (anonymous)],
rebind: [Function (anonymous)],
report: [Function (anonymous)],
search: [Function (anonymous)],
source: [Function (anonymous)],
subscribe: [Function (anonymous)],
trace: [Function (anonymous)],
unbind: [Function (anonymous)],
unlink: [Function (anonymous)],
unlock: [Function (anonymous)],
unsubscribe: [Function (anonymous)],
all: [Function: all],
del: [Function (anonymous)],
render: [Function: render],
listen: [Function: listen],
request: IncomingMessage { app: [Circular *1] },
response: ServerResponse { app: [Circular *1] },
cache: {},
engines: {},
settings: {
'x-powered-by': true,
etag: 'weak',
'etag fn': [Function: generateETag],
env: 'development',
'query parser': 'extended',
'query parser fn': [Function: parseExtendedQueryString],
'subdomain offset': 2,
'trust proxy': false,
'trust proxy fn': [Function: trustNone],
view: [Function: View],
views: 'C:\Users\takuya\Desktop\test\sqlite3_test\views',
'jsonp callback name': 'callback'
},
locals: [Object: null prototype] {
settings: {
'x-powered-by': true,
etag: 'weak',
'etag fn': [Function: generateETag],
env: 'development',
'query parser': 'extended',
'query parser fn': [Function: parseExtendedQueryString],
'subdomain offset': 2,
'trust proxy': false,
'trust proxy fn': [Function: trustNone],
view: [Function: View],
views: 'C:\Users\takuya\Desktop\test\sqlite3_test\views',
'jsonp callback name': 'callback'
}
},
mountpath: '/',
_router: [Function: router] {
params: {},
_params: [],
caseSensitive: false,
mergeParams: undefined,
strict: false,
stack: [ [Layer], [Layer], [Layer], [Layer], [Layer] ]
}
}
こねくてっどふぉーゆぅー
Message has been sent: {"name":"takuya","pass":"1111"}
SELECT * FROM user WHERE name ='takuya' AND password = '1111'
false //ここがsocket.io
えるせ
{ id: 1, name: 'takuya', password: '1111' } //ここがsqlite3
true

該当のソースコード

テーブル設計
userテーブル
CREATE TABLE user(
id INT PRIMARY KEY,
name VARCHAR(20),
password VARCHAR(20))

app.js
const http = require('http')
const socketIo = require('socket.io');
const express = require('express')
const fs = require('fs');
const ejs = require('ejs');
const bodyParser = require("body-parser");
const sqlite3 = require("sqlite3");
const db = new sqlite3.Database("./test.db");
var url ="./index.ejs"
const html =fs.readFileSync(url,'utf-8', (err, data) => {
//dataがファイルの中身、errは読み込み時のエラ-
console.log('実行します');
if(data) {
console.log(data+'aaaa');
} else {
console.log(err+'aaaaa');
}
});
const app= express()
app.use(express.json())
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const server = http.Server(app);
const io = socketIo(server);
console.log(app)
var content;
app.get('/home',(request,response)=>{
if(!request.query.completed){
console.log('get実行します')
content = ejs.render(html,{
message:'You said nothing.Fuck',
});
response.writeHead(200, {'Content-Type':'text/html'});
response.write(content);
response.end()
return
}
})
app.post('/GET',(request,response)=>{
response.write();
response.end()
return
/response.write(content);/
console.log('いぐぞ')
/response.end()/
})

server.listen(3000)
io.on('connection', (socket) => {
var brack = false;
console.log('こねくてっどふぉーゆぅー');
socket.on('sendMessage', (message) => {
console.log('Message has been sent: ', message);

var obj = JSON.parse(message)
console.log("SELECT * FROM user WHERE name ='"+obj.name+"' AND password = '"+obj.pass+"'");
// db.serialize((brack) => {
db.get("SELECT * FROM user WHERE name ='"+obj.name+"' AND password = '"+obj.pass+"'", (err, row) => {
console.log(row);
brack = true;
url = "./select.ejs"
console.log(brack);

});

//});
console.log(brack);
if(brack){
app.post('/select',(request,response)=>{
content = ejs.render(html,{ });
response.write(content);
response.end()
return
/response.write(content);/
console.log('いぐぞ')
/response.end()/
})
}else{
console.log("えるせ")
}
// io.emit('title',todos)
// io.emit('receiveMessage', message);

});
});

index.ejs

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="HandheldFriendly" content="True" /> <title>ログイン</title> </head> <body> <script type="module" src="top.js"></script> <header> <h3>ログインしてください</h3>
</header>
<p> 名前<input type="text" id="name" required minlength="4" maxlength="8" size="10"></p> <p>パスワード<input type="text" id="pass" required minlength="4" maxlength="8" size="10"></p> <button id="sendButton" type="button">送信</button> <footer> <p>© サイトタイトル</p> </footer> <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); const clearText = () => { document.getElementById('name').value = ''; document.getElementById('pass').value = ''; } document.getElementById('sendButton').addEventListener('click', () => { console.log("押したよ");
let name = document.getElementById('name').value; let pass = document.getElementById('pass').value; var test_json=JSON.stringify({ name: name, pass: pass }) if (test_json === '') { return; } socket.emit('sendMessage',test_json); clearText(); }); </script>
</body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問