TypeError: reply is not a function
TypeError: reply is not a function
使用 Hapi v17,我只是想制作一个简单的网络 API 来开始积累我的知识,但每次测试构建的 GET 方法时,我总是遇到错误。下面是我的代码 运行:
'use strict';
const Hapi = require('hapi');
const MySQL = require('mysql');
//create a serve with a host and port
const server = new Hapi.Server({
host: 'serverName',
port: 8000
});
const connection = MySQL.createConnection({
host: 'host',
user: 'root',
password: 'pass',
database: 'db'
});
connection.connect();
//add the route
server.route({
method: 'GET',
path: '/helloworld',
handler: function (request, reply) {
return reply('hello world');
}
});
server.start((err) => {
if (err) {
throw err;
}
console.log('Server running at:', server.info.uri);
});
以下是我收到的错误:
Debug: internal, implementation, error
TypeError: reply is not a function
at handler (/var/nodeRestful/server.js:26:11)
我不确定为什么调用回复函数时会出现问题,但目前这是一个致命错误。
您的代码似乎有重复:
const server = new Hapi.Server({
host: 'serverName',
port: 8000
});
// Create a server with a host and port
// This second line is not needed!!! and probably is causing the error
//you described
const server = new Hapi.Server();
Hapi 版本 17 有一个完全不同的 API。
路由处理程序不再作为第二个参数传递给 reply
函数,而是传递给它们称为 Response Toolkit 的东西,它是一个包含用于处理响应的属性和实用程序的对象。
使用新的 API,您甚至不必像您的情况那样使用响应工具包来 return 简单的文本响应,您可以简单地 return 来自处理程序的文本:
//add the route
server.route({
method: 'GET',
path: '/helloworld',
handler: function (request, h) {
return 'hello world';
}
});
响应工具包用于自定义响应,例如设置内容类型。例如:
...
handler: function (request, h) {
const response = h.response('hello world');
response.type('text/plain');
return response;
}
注意: 有了这个新的 API,server.start()
不接受回调函数,即使您提供回调函数也不会被调用(您可能已经注意到回调函数中的 console.log()
从未发生过)。现在,server.start()
return 是一个 Promise,可用于验证服务器是否正常启动。
我相信这个新的 API 是为与 async-await
语法一起使用而设计的。
要解决此问题,您只需将 return reply('hello world');
替换为 return 'hello world';
以下是说明:
根据 hapi v17.x 他们用新的生命周期方法接口替换了 reply() 接口:
删除了 response.hold() 和 response.resume()。
方法是异步的,所需的 return 值是响应。
- 响应工具包 (h) 随助手一起提供(而不是 reply() 装饰)。
使用 Hapi v17,我只是想制作一个简单的网络 API 来开始积累我的知识,但每次测试构建的 GET 方法时,我总是遇到错误。下面是我的代码 运行:
'use strict';
const Hapi = require('hapi');
const MySQL = require('mysql');
//create a serve with a host and port
const server = new Hapi.Server({
host: 'serverName',
port: 8000
});
const connection = MySQL.createConnection({
host: 'host',
user: 'root',
password: 'pass',
database: 'db'
});
connection.connect();
//add the route
server.route({
method: 'GET',
path: '/helloworld',
handler: function (request, reply) {
return reply('hello world');
}
});
server.start((err) => {
if (err) {
throw err;
}
console.log('Server running at:', server.info.uri);
});
以下是我收到的错误:
Debug: internal, implementation, error
TypeError: reply is not a function
at handler (/var/nodeRestful/server.js:26:11)
我不确定为什么调用回复函数时会出现问题,但目前这是一个致命错误。
您的代码似乎有重复:
const server = new Hapi.Server({
host: 'serverName',
port: 8000
});
// Create a server with a host and port
// This second line is not needed!!! and probably is causing the error
//you described
const server = new Hapi.Server();
Hapi 版本 17 有一个完全不同的 API。
路由处理程序不再作为第二个参数传递给 reply
函数,而是传递给它们称为 Response Toolkit 的东西,它是一个包含用于处理响应的属性和实用程序的对象。
使用新的 API,您甚至不必像您的情况那样使用响应工具包来 return 简单的文本响应,您可以简单地 return 来自处理程序的文本:
//add the route
server.route({
method: 'GET',
path: '/helloworld',
handler: function (request, h) {
return 'hello world';
}
});
响应工具包用于自定义响应,例如设置内容类型。例如:
...
handler: function (request, h) {
const response = h.response('hello world');
response.type('text/plain');
return response;
}
注意: 有了这个新的 API,server.start()
不接受回调函数,即使您提供回调函数也不会被调用(您可能已经注意到回调函数中的 console.log()
从未发生过)。现在,server.start()
return 是一个 Promise,可用于验证服务器是否正常启动。
我相信这个新的 API 是为与 async-await
语法一起使用而设计的。
要解决此问题,您只需将 return reply('hello world');
替换为 return 'hello world';
以下是说明:
根据 hapi v17.x 他们用新的生命周期方法接口替换了 reply() 接口:
删除了 response.hold() 和 response.resume()。
方法是异步的,所需的 return 值是响应。
- 响应工具包 (h) 随助手一起提供(而不是 reply() 装饰)。