如何在Next.js中使用MongoDB Stitch

时间:2019-04-10 10:18:25

标签: reactjs mongodb next.js isomorphic-javascript mongodb-stitch

我计划使用mongoDB Stitch。但是它提供的浏览器SDK和服务器SDK不同。我尝试了两个,但出现了一些错误。我相信这是因为我的应用程序在使用Next.js时是同构的。请指导我在这种情况下该怎么办。

在使用 mongodb-stitch-browser-sdk

时出现self is not defined之类的错误

在使用 mongodb-stitch-server-sdk 时出现Module not found: Can't resolve 'fs'问题。

请帮助。我在here

这个网站上也看到了类似的问题,但没有任何答案

1 个答案:

答案 0 :(得分:0)

是的,是因为nextjs建立了同构应用程序。因此,请尝试创建webhook并触发mongodb针脚api,或者直接使用webhook中的服务。 这是通过针脚webhook进行使用注册的示例:

exports = function(payload) {
    const request = EJSON.parse(payload.body.text());
    const http = context.services.get("<app-title>");
    const owner = context.values.get("<username-of-the-app-owner>");
    const apiKey = context.values.get("<api-key>");

    return http.post({
        url: "https://stitch.mongodb.com/api/admin/v3.0/auth/providers/mongodb-cloud/login",
        body: JSON.stringify({
            username: owner,
            apiKey: apiKey
        })
    }).then(response => EJSON.parse(response.body.text()).access_token).then(accessToken => {
        return http.post({
            url: "https://stitch.mongodb.com/api/admin/v3.0/groups/<group-id>/apps/<app-id>/users",
            headers: {
                Authorization: ["Bearer " + accessToken]
            },
            body: JSON.stringify({
                email: request.useremail,
                password: request.userpass
            })
        });
    });
};

这是使用aws s3服务的服务器:

exports = function(payload) {
    //base64EncodedImage, bucket, fileName, fileType
    const body = EJSON.parse(payload.body.text());
    // Convert the base64 encoded image string to a BSON Binary object
    const binaryImageData = BSON.Binary.fromBase64(body.picture, 0);
    // Instantiate an S3 service client
    const s3Service = context.services.get('<aws-s3-service-title>').s3('<location>');
    // Put the object to S3
    return s3Service.PutObject({
        'Bucket': '<aws-bucket-title>',
        'Key': body.fileName,
        'ContentType': body.fileType,
        'Body': binaryImageData
    })
        .then(putObjectOutput => {
            // console.log(putObjectOutput);
            // putObjectOutput: {
            //   ETag: <string>, // The object's S3 entity tag
            // }
            return putObjectOutput;
        })
        .catch(console.error);
    // return body;
};