2016-02-28 5 views
1

Я работаю над приложением образца с использованием Node и расслоение плотной SQL Server 2008.Подключение к SQL Server из Nodejs

Чтобы получить доступ к серверу SQL из узла JS я использую Seriate [http://developer.leankit.com/painless-sql-server-with-nodejs-and-seriate/].

Ниже мой пример кода

Файл ./DBLayer/db.js код

var sql = require("seriate"); 

var config = { 
"server": "127.0.0.1", 
"user": "sa", 
"password": "12kafour~9999", 
"database": "Tickets" 
}; 

sql.setDefaultConfig(config); 

exports.sqlDb = sql; 

И файл app.js код

var express = require('express'); 
var app = express(); 
var path = require('path'); 
var bodyParser = require('body-parser'); 
var sqlDb = require('./DBLayer/db.js'); 

//-- set the view engine 
app.set('view engine' , 'ejs'); 

app.use(bodyParser.json());  // to support JSON-encoded bodies 

app.use(bodyParser.urlencoded({  // to support URL-encoded bodies ?? 
    extended: true 
})); 

//-- set the routes 
app.get('/login' , function(req , res){ 
//-- set the view to render 
res.render('login' , {title:'Login Screen' , error : ''}); 
}); 

app.post('/login' , function(req , res) { 

sqlDb.execute({ 
     query: "SELECT count(*) FROM USERS WHERE LOGIN ='" + req.body.username + "'" + "AND PASSWORD = '" + req.body.pwd + "'" 
    }).then(function(results) { 
     res.render('login' , {title:'Login Screen' , error : 'u r the one...'}); 
    }, function(err) { 
     res.render('login' , {title:'Login Screen' , error : 'Invalid Login/Password.'}); 
    }); 
}); 

//-- set the port 
var server = app.listen(3000 , function() { 
console.log('Server Ready..') 
}); 

Когда пользователь вводит имя пользователя и пароль и отправляет am getting "Ошибка TypeError: sqlDb.execute не является функцией".

Я не уверен, почему я получаю эту ошибку.

ответ

1

Вы должны изменить эту строку:

var sqlDb = require('./DBLayer/db.js'); 

к

var sqlDb = require('./DBLayer/db.js').sqlDb; 

или изменить эту строку:

exports.sqlDb = sql; 

к

exports = sql; 

Объяснение: В узле, когда вы делаете: var sqlDb = require('./DBLayer/db.js'); это делает sqlDb exports.

Так что в вашем коде у вас есть exports.sqlDb = sql. У компилятора есть правильный экспорт, который не имеет функции выполнения. Экспорт имеет только 1 var, exports.sqlDb.


Бонус Подсказка: Если вы действительно хотите, вам код для работы, без изменения app.js вы можете добавить это в конце модуля:

exports.execute=function(){ 
    return sql.execute.call(sql,arguments) 
}