Mat*_*ola 4 azure node.js azure-functions
我无法使用节点文件系统模块的azure函数工作.
我创建了一个全新的功能应用程序,具有最基本的HTTP触发功能,并包含'fs'模块:
var fs = require('fs');
module.exports = function (context, req, res) {
context.log('function triggered');
context.log(req);
context.done();
}
Run Code Online (Sandbox Code Playgroud)
这很好用.我在实时流日志和函数调用列表中看到了完整的请求.
但是,只要我添加实际使用文件系统的代码,它就会崩溃 azure函数. 它既不会完成也不会抛出错误.它似乎也没有出现在天蓝色的函数调用列表中,这是可怕的,因为这是失败信息的丢失,我可能认为我的服务在实际崩溃时运行正常.
var fs = require('fs');
module.exports = function (context, req, res) {
context.log('function triggered');
context.log(req);
fs.writeFile('message.txt', 'Hello Node.js', (err) => {
if (err) throw err;
console.log('It\'s saved!');
context.done();
});
}
Run Code Online (Sandbox Code Playgroud)
在fs.writeFile直接从node.js的网站采取代码:
https://nodejs.org/dist/latest-v4.x/docs/api/fs.html#fs_fs_writefile_file_data_options_callback
我context.done()在回调中添加了该代码,但该代码段在正常开发环境中应该没有问题.
这提出了一些问题:
根据我的理解,即使这被认为是无服务器计算,仍然有一个VM/Azure网站应用服务,其下面有一个文件系统.我可以使用Kudu控制台并导航并查看/ wwwroot和/ home/functions/secrets文件中的所有文件.
想象一下这样一种场景,即编写azure函数来编写具有唯一名称的文件而不执行清理,最终会占用主机VM上的所有磁盘空间并降低性能.这可能是由开发人员意外发生的,并且可能会被忽视,直到为时已晚.
这让我想知道是不是设计不使用文件系统,或者我的函数是否写错了?
mat*_*ewc 10
是的,你可以使用文件系统,具有一定的限制,描述在这里.该页面描述了一些您可以访问的目录,如D:\ HOME和D:\ LOCAL\TEMP.我已修改下面的代码以写入临时目录,它可以工作:
var fs = require('fs');
module.exports = function (context, input) {
fs.writeFile('D:/local/Temp/message.txt', input, (err) => {
if (err) {
context.log(err);
throw err;
}
context.log('It\'s saved!');
context.done();
});
}
Run Code Online (Sandbox Code Playgroud)
您的初始代码失败,因为它试图写入D:\ Windows\system32,这是不允许的.
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |