返回 404 的 Netlify 无服务器函数
Netlify Serverless Function returning 404
我正在尝试在 Netlify 上设置一个简单的无服务器功能,只是为了测试环境变量的使用情况。我在 Netlify 中为我的站点定义了以下两个环境变量:
Variable Name
Value
ALPHABET_SEPARATION
2
CHARS_BETWEEN
3
我还更新了我的函数目录如下:
Functions directory: myfunctions
我正在使用来自 github 的持续部署。由于我目前不知道 npm 的使用,并且发现直接测试生产部署很方便,所以我在我的根目录中定义了一个名为 myfunctions
的子目录,并放置了我的 javascript 文件,其中包含“无服务器”功能在我的本地机器上。我已经建立了逻辑,以便只有在设置了“netlify
”标志时才会调用“无服务器”函数,否则,将在客户端执行备用函数。基本上它的工作原理如下:
const deploy = "netlify" //Possible valid values are "local" and "netlify"
async function postRandomString() {
const stringToUpdate = "THISISATESTSTRING"
var stringToPost = "DUMMYINITIALVALUE";
if (deploy === "local") {
stringToPost = updateString(stringToUpdate); //updateString is a function defined elsewhere and executes client-side;
}
else if (deploy === "netlify") {
const config = {
method: 'GET',
headers: {
'Accept': 'application/json',
}
};
const res = await fetch(`myfunctions/serverUpdateString?input=${stringToUpdate}`, config);
const data = await res.json();
stringToPost = data.retVal;
console.log(data.retVal);
}
else {
stringToPost = "##ERROR##";
}
postString(stringToPost); //postString is a function defined elsewhere and executes client-side;
}
serverless函数文件serverUpdateString.js
编码如下(基本上是把字符串中某个位置(由CHARS_BETWEEN
决定)的字符设置为某个数字的字母字符(由 ALPHABET_SEPARATION
) 在字符串的第一个字符之后的字母表中的位置确定(不要问为什么 - 关键是它从来没有 receives/handles 请求):
exports.handler = async function (event) {
const { CHARS_BETWEEN, ALPHABET_SEPARATION } = process.env;
const charsBetween = CHARS_BETWEEN;
const alphabetSeparation = ALPHABET_SEPARATION;
const initString = event.queryStringParameters.input;
const rootUnicode = initString.charCodeAt(0);
const finalUnicode = "A".charCodeAt(0) + (rootUnicode - "A".charCodeAt(0) + alphabetSeparation) % 26;
const finalChar = String.fromCharCode(finalUnicode);
const stringArray = initString.split("");
stringArray[charsBetween + 1] = finalChar;
const stringToReturn = stringArray.join("");
const response = {
statusCode: 200,
retVal: stringToReturn,
}
return JSON.stringify(response);
}
当我 运行 它时,我收到 GET 请求的 404 错误:
在上图中,script.js:43
是调用文件中的行const res = await fetch(myfunctions/serverUpdateString?input=ATESTSTRIN, config);
,如上面第一个代码块所示。
我做错了什么?既然我已经正确指定了文件夹并将其放置在目录结构中的正确位置,那么 Netlify 应该能够获取无服务器函数文件吗?我已经给出了完整的完整代码,但问题似乎很简单。期待您的帮助,谢谢。
我从 Netlify 论坛获得了帮助。基本上需要进行以下更改:
- 获取请求 -- 调用代码中的第 43 行 (script.js) -- 需要更改为
const res = await fetch(`https://netlifytestserverless.netlify.app/.netlify/functions/serverUpdateString?input=${stringToUpdate}`, config);
- 需要将 lambda 函数中的 return 语句更改为:
const response = {
statusCode: 200,
body: JSON.stringify(stringToReturn),
}
- 其他小改动,例如使用
parseInt
和环境变量。
代码现在可以工作了。
我正在尝试在 Netlify 上设置一个简单的无服务器功能,只是为了测试环境变量的使用情况。我在 Netlify 中为我的站点定义了以下两个环境变量:
Variable Name | Value |
---|---|
ALPHABET_SEPARATION | 2 |
CHARS_BETWEEN | 3 |
我还更新了我的函数目录如下:
Functions directory: myfunctions
我正在使用来自 github 的持续部署。由于我目前不知道 npm 的使用,并且发现直接测试生产部署很方便,所以我在我的根目录中定义了一个名为 myfunctions
的子目录,并放置了我的 javascript 文件,其中包含“无服务器”功能在我的本地机器上。我已经建立了逻辑,以便只有在设置了“netlify
”标志时才会调用“无服务器”函数,否则,将在客户端执行备用函数。基本上它的工作原理如下:
const deploy = "netlify" //Possible valid values are "local" and "netlify"
async function postRandomString() {
const stringToUpdate = "THISISATESTSTRING"
var stringToPost = "DUMMYINITIALVALUE";
if (deploy === "local") {
stringToPost = updateString(stringToUpdate); //updateString is a function defined elsewhere and executes client-side;
}
else if (deploy === "netlify") {
const config = {
method: 'GET',
headers: {
'Accept': 'application/json',
}
};
const res = await fetch(`myfunctions/serverUpdateString?input=${stringToUpdate}`, config);
const data = await res.json();
stringToPost = data.retVal;
console.log(data.retVal);
}
else {
stringToPost = "##ERROR##";
}
postString(stringToPost); //postString is a function defined elsewhere and executes client-side;
}
serverless函数文件serverUpdateString.js
编码如下(基本上是把字符串中某个位置(由CHARS_BETWEEN
决定)的字符设置为某个数字的字母字符(由 ALPHABET_SEPARATION
) 在字符串的第一个字符之后的字母表中的位置确定(不要问为什么 - 关键是它从来没有 receives/handles 请求):
exports.handler = async function (event) {
const { CHARS_BETWEEN, ALPHABET_SEPARATION } = process.env;
const charsBetween = CHARS_BETWEEN;
const alphabetSeparation = ALPHABET_SEPARATION;
const initString = event.queryStringParameters.input;
const rootUnicode = initString.charCodeAt(0);
const finalUnicode = "A".charCodeAt(0) + (rootUnicode - "A".charCodeAt(0) + alphabetSeparation) % 26;
const finalChar = String.fromCharCode(finalUnicode);
const stringArray = initString.split("");
stringArray[charsBetween + 1] = finalChar;
const stringToReturn = stringArray.join("");
const response = {
statusCode: 200,
retVal: stringToReturn,
}
return JSON.stringify(response);
}
当我 运行 它时,我收到 GET 请求的 404 错误:
在上图中,script.js:43
是调用文件中的行const res = await fetch(myfunctions/serverUpdateString?input=ATESTSTRIN, config);
,如上面第一个代码块所示。
我做错了什么?既然我已经正确指定了文件夹并将其放置在目录结构中的正确位置,那么 Netlify 应该能够获取无服务器函数文件吗?我已经给出了完整的完整代码,但问题似乎很简单。期待您的帮助,谢谢。
我从 Netlify 论坛获得了帮助。基本上需要进行以下更改:
- 获取请求 -- 调用代码中的第 43 行 (script.js) -- 需要更改为
const res = await fetch(`https://netlifytestserverless.netlify.app/.netlify/functions/serverUpdateString?input=${stringToUpdate}`, config);
- 需要将 lambda 函数中的 return 语句更改为:
const response = {
statusCode: 200,
body: JSON.stringify(stringToReturn),
}
- 其他小改动,例如使用
parseInt
和环境变量。
代码现在可以工作了。