我正在尝试使用node和hapi.js测试与sql server的连接,并在我的一个表上运行一个简单的查询。我对node和Hapi相当新,所以我只想弄明白
所以首先我的文件夹结构如下我有一个名为api的文件夹,里面有路由,这就是我正在做的路线get_aosdata.js这个工作我测试它只是传回'hello world'然后我有一个api下的查询文件夹这是我在connection.js中设置数据库连接的地方
这是我的路线目前的样子
'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);
}));
}
}
}
我正在调用一个先决条件来进行连接,这就是这段代码的样子
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进行调用任何帮助都会受到赞赏我是node和hapi的新手,但是我已经阅读了很多关于hapi的内容并且非常想使用它
答案 0 :(得分: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}`);
});
这可能是完全错误的方式,但这就是我的工作方式