如何使用Hapi 18.1设置响应延迟,如果 API 响应缓慢,我想看到沙漏旋转。对于我使用的早期版本,setTimeout()如下所示。
server.route({
method: 'GET',
path:'/hello',
handler: (request, h) => {
setTimeout(() => reply('Hello World!'), 1000);
}
});
Run Code Online (Sandbox Code Playgroud)
但是 v18.1 抛出错误
server.route({
method: 'GET',
path:'/hello',
handler: (request, h) => {
setTimeout(() => h.response('Hello World!'), 1000);
}
});
Run Code Online (Sandbox Code Playgroud)
错误
Debug: internal, implementation, error
Error: get method did not return a value, a promise, or throw an error
at module.exports.internals.Manager.execute (C:\Users\javakb\workspace\node_modules\hapi\lib\toolkit.js:48:29)
at processTicksAndRejections (internal/process/task_queues.js:85:5)
at async Object.internals.handler (C:\Users\javakb\workspace\node_modules\hapi\lib\handler.js:46:20)
at async exports.execute (C:\Users\javakb\workspace\node_modules\hapi\lib\handler.js:31:20)
at async Request._lifecycle (C:\Users\javakb\workspace\node_modules\hapi\lib\request.js:312:32) …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个使用Hapi的服务器的应用程序,每当我尝试加载.jade文件时,我都会遇到问题.这是我的index.js文件的当前代码:
var Hapi = require('hapi');
var internals = {};
internals.main = function() {
var options = {
views: {
engines: { jade: 'jade' },
path: '../app',
compileOptions: {
pretty: true
}
}
};
this._server = new Hapi.createServer('localhost', 8000, options);
this._server.route({
method: 'GET',
path: '/',
handler: function(request, reply) {
reply.view('index')
}
});
// Start server.
this._server.start()
};
internals.main();
Run Code Online (Sandbox Code Playgroud)
该文件包含目录中的一系列本地脚本和CSS文件app,但是当index.jade加载页面时,它不会看到这些本地文件.有什么我需要在我的选项中添加/修改,或者本地脚本和样式文件的位置是使用Hapi进行玉编译的问题?
所以我有一个使用hapi js和socket.io设置的服务器
var hapi = require('hapi');
var server = new hapi.Server();
server.connection({
host : 'localhost',
port: 3000,
routes: {cors: true}
});
var io = require("socket.io")(server.listener);
Run Code Online (Sandbox Code Playgroud)
在客户端上
var io = socket.connect(':3000');
Run Code Online (Sandbox Code Playgroud)
当我从localhost访问一切正常,但当我从外部IP访问我得到CORS错误,并且无法使其工作,在服务器上我尝试过io.set( "origins", "*:*" );没有工作,io.set('transports', ['websocket', 'xhr-polling', 'jsonp-polling', 'htmlfile', 'flashsocket']);也没有工作和抛出浏览器上的错误请求错误.我错过了什么吗?非常感谢你的时间.
我刚刚尝试制作SPA,但我无法解决index.html依赖关系(比如包括相关的css,js文件).所有js和css文件都无法加载到浏览器中并404在开发控制台中显示错误.
/root
|
|__public
| ??? spa
| ??? controllers
| ??? css
| ??? html
| ??? js-self
| ??? js-vendor
| ??? services
|_____________ index.html
Run Code Online (Sandbox Code Playgroud)
路线申报
var assets = function(){
return {
method: 'GET',
path: '/{param*}',
handler: {
directory :{
path : 'public',
index: false
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所有路线的顺序
info: ================Registered routes=============
info: Route: GET /employee
info: Route: POST /employee
info: Route: PUT /employee
info: Route: DELETE /employee
info: Route: POST /signin
info: Route: POST …Run Code Online (Sandbox Code Playgroud) 我想允许我的前端将值的哈希值推送到后端.散列可以具有任何(JSON合法)密钥,但每个密钥的值必须适合特定的模式.把它想象成:
extended: {
tubers: {
potato: {weight: 1, cost: 2},
yam: {weight: 1, cost: 1}
}
}
Run Code Online (Sandbox Code Playgroud)
所以扩展对象有块茎场.块茎领域有许多键,但每个值必须具有整数的权重和成本.
我似乎无法将其映射到我的普通Joi对象模式框架中.
我觉得我缺少一些基本的东西,但我无法弄清楚如何在HapiJS中获得更好的控制台输出.
我正在编写一个API,并在出现错误时打印出来.
150516/063815.663,[回复],http:// localhost:3000:post/users {} 500(120ms)
并返回一个回复,说"存在内部服务器错误".
我需要更改什么才能看到错误输出实际是什么?
我有一个用Hapi.js构建的服务器.我创建了一个插件来限制对某些本地网络IP地址的访问,如下所示:
exports.register = function (server, options, next) {
server.ext({
type: 'onRequest',
method: function (request, reply) {
console.log(request);
if (
request.info.remoteAddress.indexOf("192.") !== 0 &&
request.info.remoteAddress.indexOf("127.") !== 0
) {
return reply.view('error', {
error: "I DON'T LIKE YOU"
});
}
return reply.continue();
}
});
next();
};
exports.register.attributes = {
pkg: { "name": "localOnly" }
};
Run Code Online (Sandbox Code Playgroud)
我想将此插件仅应用于"/ pathA",同时保持所有用户都可以访问"/ pathB"和"/ pathC".因此我尝试这样做:
const server = new Hapi.Server();
server.connection({ port: 8000 });
server.register(require('vision'), err => {
if (err) throw err;
server.views(/* removed for brevity */);
server.route({ …Run Code Online (Sandbox Code Playgroud) 我想和socket.io一起运行Hapi.js.如果我使用相同的服务器为socket.io和hapi应用程序提供单独的连接,那将是很好的,因为我想在我的套接字中使用Hapi auth cookie
我尝试了一些解决方案,但它们都没有工作,我的服务器崩溃了.我尝试在hapi和我的应用程序启动的同一端口上运行socket.io,但我收到"找不到此localhost页面"错误.我做错了什么?任何帮助将不胜感激
这是我的代码:
const Hapi = require('hapi');
const server = new Hapi.Server();
const Config = require('./config/config.js');
const port = Number(process.env.PORT || 3000);
const io = require("socket.io")(port);
server.connection({
port: port
});
// my routes are here...
io.on("connection", function (socket) {
console.log('connected');
// Do all the socket stuff here.
})
server.start(function(err) {
if (err) {
console.error(err);
throw err;
}
console.log('Server started at %s', server.info.uri);
});
Run Code Online (Sandbox Code Playgroud) 我有一个使用Hapi的版本17的NodeJS应用程序,它使用一个返回地图图像的Web服务,但是,当运行下面的代码时,我得到以下错误:
Debug: internal, implementation, error
Error: handler method did not return a value, a promise, or throw an error
at module.exports.internals.Manager.execute (C:\map\node_modules\hapi\lib\toolkit.js:52:29)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
Run Code Online (Sandbox Code Playgroud)
var Hapi = require('hapi'),
server = new Hapi.Server({
host: '0.0.0.0',
port: 8080,
routes: {
cors: true
},
SphericalMercator = require('sphericalmercator'),
sm = new SphericalMercator({ size: 256 }),
prequest = require('request').defaults({ encoding = null });
var wmsUrl = "http://localhost:8088/service/wms?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&STYLES=&FORMAT=image%2Fpng&HEIGHT=383&WIDTH=768&SRS=EPSG%3A3857";
server.route({
method: 'GET',
path: '/{layers}/{z}/{x}/{y}.png',
handler: async (request, h) => {
var bbox = sm.bbox(request.params., …Run Code Online (Sandbox Code Playgroud) 我最近将项目升级为使用@hapi/hapi节点模块与旧hapi模块。我正在使用版本18.3.1("@hapi/hapi": "^18.3.1")。
随着导入读取,我的打字稿定义不再起作用: import * as Hapi from 'hapi';
运行节点进程时,出现模块未找到错误。有没有办法将类型指向@types/hapi新@hapi/hapi模块?