はじめに
Node.js + Express + SQL Serverによってデータベースに接続し、そこに登録されているデータを一覧で表示するようなページを作成したかったのですが、上手くデータを引っ張ってこれずに詰まってしまいました。
現状
VScodeのターミナルでnpm start
してlocalhostを起動すると、
下記にsqlSample.ejs
へのリンクを書いていますので、押しますと、
こうなります。
私なりに少し調べたのですが、変数contentがDBを参照したデータを引っ張ってこれてないのだと思います。
本題
すみません、ここからが本題になります。
フォルダ構成等を下記に示していきます。長くなりますが宜しくお願いします。
どうなっているか
- フォルダ構成
基本的にはExpress generator
コマンドによって生成してます。こんな感じです。
- routes/index.js
js
1var express = require('express'); 2var router = express.Router(); 3 4/* GET home page. */ 5router.get('/', function(req, res, next) { 6 res.render('index', { title: 'Express' }); 7}); 8 9router.get('/sqlSample', function(req, res, next) { 10 res.render('sqlSample', { title: 'sqlSample', content: content}); 11}); 12 13module.exports = router;
- routes/sqlSample.js
js
1var express = require('express'); 2var router = express.Router(); 3 4// Connectionを定義する 5var Connection = require('tedious').Connection; 6 7// SQLServerの接続定義を記載する。 8var config = { 9 server: 'localhost', 10 authentication: { 11 type: 'default', 12 options: { 13 userName: 'admin', 14 password: 'xxxxx' // 伏せてます 15 } 16 }, 17 options: { 18 encrypt: true, 19 database: 'Training01' 20 } 21}; 22 23/* GET users listing. */ 24router.get('/', function (req, res, next) { 25 var connection = new Connection(config); 26 var content = []; 27 28 connection.on('connect', function (err) { 29 if (err) { 30 console.log('SQL Serer connect error.(' + err + ')'); 31 process.exit(); 32 } 33 console.log("connected"); 34 executeStatement(); 35 }); 36 37 connection.on('end', function () { 38 console.log("disconnected"); 39 res.render('sqlSample', { title: '製品一覧', content: content }); 40 }); 41 42 var Request = require('tedious').Request; 43 44 function executeStatement() { 45 request = new Request("SELECT * FROM ProductsMaster with (NOLOCK)", function (err) { 46 if (err) { 47 console.log(err); 48 } 49 }); 50 51 var result = {}; 52 request.on('row', function (columns) { 53 columns.forEach(function (column) { 54 if (column.value === null) { 55 console.log('NULL'); 56 } else { 57 result[column.metadata.colName] = column.value; 58 } 59 }); 60 content.push(result); 61 result = {}; 62 }); 63 64 request.on('requestCompleted', function () { 65 console.log('requestCompleted'); 66 connection.close(); 67 }); 68 69 70 connection.execSql(request); 71 } 72}); 73 74module.exports = router; 75
- routes/app.js
js
1var sqlSample = require('./routes/sqlSample'); 2 3app.use('/sqlSample', sqlSample);
- views/sqlSample.ejs
ejs
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 5 <title><%= title %></title> 6 <link rel='stylesheet' href='/stylesheets/style.css' /> 7 </head> 8 <body> 9 <h1><%= title %></h1> 10 <div role="main"> 11 <table> 12 <tr> 13 <th>製品コード</th> 14 <th>製品名</th> 15 <th>単価</th> 16 </tr> 17 <% content.forEach(function (value, key) { %> 18 <tr> 19 <td><%= value.ProductsCode %></td> 20 <td><%= value.ProductsName %></td> 21 <td><%= value.UnitPrice %></td> 22 </tr> 23 <% }); %> 24 </table> 25 </div> 26 </body> 27 </html>
...すみません、この辺りにつきましては他サイトの情報を参考にして記述させていただきました。
一応、そちらのURLもここに乗せます。
Node.js Expressフレームワークを使用してSQL Serverに接続する(ページ作成)
環境
- Windows10 Home 64bit
- Microsoft SQL Server 2019
- Node.js - v12.16.1
- npm - 6.13.4
- Express - 4.16.1
最後に
ご回答くださる方にはご面倒おかけいたしますが、お答えくださると助かります。
お手数おかけします。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。