目标是让Node.js / hapi API服务器通过两件事来响应浏览器的AJAX请求:
这是两个单独的项目,只是因为二进制数据无法轻松存储在JSON中。否则,这将是单个资源。但是,最好在单个响应中发送它们。
我们通过将它们上传到单个请求中multipart/form-data。在这种情况下,浏览器提供了一种内置的机制来序列化主体,并且大多数服务器端框架都知道如何解析主体。但是,如何在相反的方向做出相同的反应呢?即,服务器应如何序列化主体以将其传输给客户端?
据我所知,这multipart/mixed可能是一种有用的内容类型。但是对此几乎没有任何谈论。大多数人似乎诉诸于提供两条单独的GET路线,每条路线一条。我之所以不喜欢它,是因为它使您更容易进入比赛条件。我想念什么?
另请参阅hapijs / discuss#563中的我的问题。
我正在为一个对象定义一个Joi模式,其中包含一些社交配置文件字段。目标是确保所有字段都存在,并且至少其中一个字段是非空字符串,但允许其他字段为null。
这是我到目前为止所拥有的:
const socialUrl = joi.string().min(1).alphanum().allow(null);
const schema = joi.object({
facebook : socialUrl.required(),
twitter : socialUrl.required(),
youtube : socialUrl.required()
}).required()
Run Code Online (Sandbox Code Playgroud)
除了以下对象被认为是有效的之外,这非常有效:
{
facebook : null,
twitter : null,
youtube : null
}
Run Code Online (Sandbox Code Playgroud)
在对象上使用min()和or()没有帮助,因为字段存在,它们只是错误的类型。
之后我自己做一个额外的循环并检查所有字段的具体情况是非常简单的null,但这并不理想。
这用于有效负载验证,如果知道客户端理解完整模式,因此希望所有字段都存在,那就太好了。也许这不值得。我确实感觉到我可以使用一些冗长的when()代码来完成工作,但似乎在那时我也可以制作自己的循环。希望被证明是错误的!
我正在尝试将一些bash dotfile转换为它们的鱼等效项。
我有一个~/.bash_logout看起来像这样:
# Flush the in-memory history, then persist the emptiness to disk.
history -c && history -w;
Run Code Online (Sandbox Code Playgroud)
尽管fish 确实具有history命令,但是它没有相同的选项,因此上述内容无法在fish中照常使用。
到目前为止history clear,我得到的最接近的是,尽管这似乎仅适用于当前会话,并且不会保留下来,因为历史记录会在我创建的任何新选项卡中返回。此外,它会提示您进行确认,我希望每次注销时都不必这样做。
但是,这是进步,因此基于另一个答案,我将其输入~/.config/fish/config.fish:
function on_exit --on-process %self
history clear
end
Run Code Online (Sandbox Code Playgroud)
这似乎甚至没有提示我,更不用说做任何有用的事情了。否则,它就不会阻塞并且发生得太快,以至于我看不到它。
如何在出口处理程序中永久擦除鱼壳历史并在以后的会话中保持该状态?现有的会话也将很好,但是重要性不那么高。
最后,history手册页指出“内置历史记录”不会提示您进行确认。改为使用它是否有意义,如果可以,如何使用?
·clear清除历史记录文件。在删除历史记录之前会显示一个提示,要求您确认您是否确实要清除所有历史记录,除非使用内置历史记录。
command-line ×1
fish ×1
hapi.js ×1
hapijs ×1
javascript ×1
joi ×1
multipart ×1
node.js ×1
schema ×1
server ×1
shell ×1
validation ×1