【发布时间】:2020-02-18 02:42:57
【问题描述】:
我使用 mongoose 制作了一个 azure 函数。我在 local.settings.json 中添加了 cosmosdb 环境变量。我在文件夹中做了 npm init 并安装了以下包。
{
"name": "signup",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"mongoose": "^5.9.1"
}
}
当我在云中运行它时,它会挂起大约一分钟,然后什么也没有返回。没有状态码。没有console.log(err)。如果我在本地运行 azure 函数,那么它只会输出:
我正在使用的请求正文
{"email": "bobjones@gmail.com", "password": "Password4$", "username" : "bobjones", "over21": true, "role": "Buyer", "phoneNumber": "7383223333", "fullname": null, "address1": null, "address2": null, "city": null, "state": null, "zip": null, "passwordCreated": null}
LETS SIGNUP
Connection to CosmosDB successful
如果我将它部署到云端进行测试,那么当我运行它时,它会完成,但没有任何输出。没有状态码。 所以它似乎没有出现在 router.post 中,因为 console.log("inside POST") 从未输出过。我开始怀疑这是一个猫鼬兼容性问题,但我不确定。猫鼬对天蓝色功能有限制吗?我只在 google 上看到过一篇关于 mongoose 和 azure 函数的文章,所以我认为它是受支持的,但没有太多文档谈论它。感谢您的帮助!
const express = require("express");
const User = require("./models/user");
const mongoose = require("azure-functions-mongooser");
const mongoose1 = require("mongoose");
const router = express.Router();
module.exports = async function (context, req) {
mongoose1
.connect(
"mongodb://" +
process.env.COSMOSDB_HOST +
":" +
process.env.COSMOSDB_PORT +
"/" +
process.env.COSMOSDB_DBNAME +
"?ssl=true&replicaSet=globaldb",
{
auth: {
user: process.env.COSMODDB_USER,
password: process.env.COSMOSDB_PASSWORD
}
}
)
.then(() => console.log("Connection to CosmosDB successful"))
.catch(err => console.error(err));
console.log("INSIDE POST")
router.post("/api/signup", (req, res, next) => {
console.log("SIGNUP BACKEND");
const user = new User({
email: req.body.email,
password: req.body.password,
username: req.body.username,
over21: req.body.over21,
role: req.body.role,
phoneNumber: req.body.phoneNumber,
fullName: req.body.fullName,
address1: req.body.address1,
address2: req.body.address2,
city: req.body.city,
state: req.body.state,
zip: req.body.zip,
passwordCreated: Date.now()
});
user
.save()
.then(result => {
console.log("MADE IT");
console.log(result);
res.status(201).json({
message: "User created!",
result: result
});
})
.catch(err => {
let error = err.message;
console.log(err);
if (error.includes("Error, expected `phoneNumber` to be unique.")) {
res.status(500).json({
error: "Phone number has already been used"
});
} else if (error.includes("Error, expected `email` to be unique.")) {
res.status(500).json({
error: "Email has already been used"
});
}
});
});
};
用户模型
const mongoose = require("mongoose");
//const uniqueValidator = require("mongoose-unique-validator");
const userSchema = mongoose.Schema({
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
username: { type: String, required: true, unique: true },
over21: { type: String, required: true },
role: { type: String, required: true },
fullName: { type: String },
address1: { type: String },
phoneNumber: { type: String, required: true, unique: true },
address2: { type: String },
city: { type: String },
state: { type: String },
zip: { type: String },
passwordCreated: { type: Date },
});
module.exports = mongoose.model("User", userSchema);
【问题讨论】:
标签: node.js azure mongoose azure-functions