2017-08-14 76 views
1

我想用連接到我的sql服務器使用節點和hapi.js並在我的一個表上運行一個簡單的查詢。我對節點和Hapi相當陌生,所以我只是想弄明白這一點我想連接到我的SQL服務器數據庫與節點和hapi.js連接

所以首先我的文件夾結構如下我有一個名爲api的文件夾,裏面有路由,這就是我在做我的路由get_aosdata .js文件這個作品我測試了它只是回傳的「Hello World」,那麼我有下API查詢文件夾這就是我在connection.js

這是我的路線目前看起來像

設置我的DB連接
'use strict'; 
const query = require('../query/connection'); 

module.exports = { 
    method: 'GET', 
    path: '/api/query/{id}', 
    config: { 
     pre: [ 
      { method: query.getSqlConnection, assign: 'db' } 
     ], 
     handler: (request, reply) => { 
       const request = new db.Request(); 
       request.query(`SELECT a.OrdNbr, a.sotypeid, a.user6, a.lupd_datetime, a.user3, a.crtd_user, a.S4Future01, a.slsperid, a.totmerch, a.CustOrdNbr from SOHeader a 
           join customer b 
           on a.CustID = b.CustId 
           join SOLine c 
           on a.OrdNbr = c.OrdNbr 
           where sotypeId = 'Q'`, ((err, recordset) => { 

           if (err) { 
            console.log(err); 
           } 
           reply(recordset); 
           })); 

     } 
    } 
} 

我打電話給一個prereq做我的連接這是這段代碼看起來像

const sql = require('mssql'); 

const dbConfig = { 
    server: 'myserver', 
    database: 'mydatabase', 
    user: 'myuser', 
    password: 'mypassword' 
} 

const getSqlConnection = (request, reply) => { 
    sql.connect(dbConfig, ((err) => { 
       if (err) { 
        console.log(err); 
       } 
    })); 
      return reply(); 
} 

module.exports = getSqlConnection; 

這是我的服務器

'use strict'; 

const Hapi = require('hapi'); 

const server = new Hapi.Server(); 

server.connection({ port: 3001, host: 'localhost' }); 

server.route(require('./api/routes/get_AOSdata')); 

server.start((err) => { 
    if(err) { 
     throw err; 
    } 

    console.log(`Server running at: ${server.info.uri}`); 
}); 

現在我的錯誤說前在位置0不符合任何允許的類型......我對這個錯誤無能,我不能在任何地方找到一個解決。我正在使用hapi和mssql使任何幫助,將不勝感激我是新的節點和hapi,但我已閱讀了很多關於hapi,並真的想使用它

+0

輕微迂迴... http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick -using-table-aliases-like-abc-or-t1-t2-t3.aspx –

+0

我完全同意你我只是試圖快速獲取數據以查看我的節點服務器工作 – josh

+0

我只是使用自己的回調來返回數據庫句柄,而不是使用答覆,請參閱[這裏](https://github.com/simon-pr/hapi-sequelize-wrapper/blob/master/lib/index.js)的一個例子,用hapijs連接到sql數據庫 –

回答

1

這就是我如何做到這一點我希望它能幫助

'use strict'; 
const sql = require('mssql'); 
const async = require('asyncawait/async'); 
const await = require('asyncawait/await'); 
const boom = require('boom'); 

const dbConfig = { 
    server: 'myserver', 
    database: 'mydb', 
    user: 'myuser', 
    password: 'mypass' 
} 

const conn = new sql.ConnectionPool(dbConfig); 

module.exports = { 
    method: 'GET', 
    path: '/api/query/{id}', 
    config: { 
     handler: (request, reply) => { 


      conn.connect().then(() => { 
       req.query(``SELECT a.OrdNbr, a.sotypeid, a.user6, a.lupd_datetime, a.user3, a.crtd_user, a.S4Future01, a.slsperid, a.totmerch, a.CustOrdNbr from SOHeader a 
          join customer b 
          on a.CustID = b.CustId 
          join SOLine c 
          on a.OrdNbr = c.OrdNbr 
          where sotypeId = 'Q'`).then((data) => { 
        reply(data); 
        conn.close(); 
       }) 
       .catch((err) => { 
       reply(boom.badRequest(err.message, err)); 
       conn.close(); 
       }); 
      }) 
      .catch((err) => { 
       reply(boom.badRequest(err.message, err)); 
      }); 
     } 
    } 
} 

你的情況,這將是你的路線,我認爲

那麼你的服務器看起來幾乎一樣喜歡這個

'use strict'; 
const Hapi = require('hapi'); 
const boom = require('boom'); 

const server = new Hapi.Server(); 

server.connection({ port: 3001, host: 'localhost', routes: {cors: true} }); 

server.route(require('./api/routes/get_AOSdata')); 

server.start((err) => { 
    if(err) { 
     boom.badRequest(err.message, err); 
    } 

    console.log(`Server running at: ${server.info.uri}`); 
}); 

這個庫侖ð完全是錯誤的方式,但這是我如何得到我的工作

+0

這對我很有用,非常感謝你!!!!! – josh