如何在JavaScript Azure Functions中共享代码?

时间:2017-06-18 06:58:28

标签: javascript node.js azure mongoose azure-functions

如何在Azure功能应用程序中的文件之间共享代码(例如,Mongo架构定义)?

我需要这样做,因为我的函数需要访问共享的mongo架构和模型,例如这个基本示例:

var blogPostSchema = new mongoose.Schema({
  id: 'number',
  title: 'string',
  date: 'date',
  content: 'string'
});

var BlogPost = mongoose.model('BlogPost', blogPostSchema);

我已尝试在我的"watchDirectories": [ "Shared" ]添加host.json行,并在该文件夹中添加了包含上述变量定义的index.js,但这似乎并不是可用于其他功能。

我只是得到Exception while executing function: Functions.GetBlogPosts. mscorlib: ReferenceError: BlogPost is not defined

我也试过require .js文件,但似乎找不到。可能是我错了路径。

有没有人有关于如何在azure函数之间共享.js代码的示例或提示?

1 个答案:

答案 0 :(得分:6)

我通过执行以下步骤解决了这个问题:

  1. 在根hosts.jsonwatch共享文件夹中添加一行。 "watchDirectories": [ "Shared" ]
  2. 在共享文件夹中,添加了包含以下架构/模型定义并导出
  3. blogPostModel.js文件

    <强>共享\ blogPostModel.js

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    
    var blogPostSchema = new Schema({
        id: 'number',
        title: 'string',
        date: 'date',
        content: 'string'
    });
    module.exports = mongoose.model('BlogPost', blogPostSchema);
    
    1. 在我的函数require中,共享文件包含以下路径: var blogPostModel = require('../Shared/blogPostModel.js');
    2. 然后,我可以在每个单独的函数中建立连接并与执行find等的模型进行交互。

      此解决方案由以下SO帖子组成:

      Azure Function in Node.js and shared files

      Cannot overwrite model once compiled Mongoose