我有一个在azure上运行的Straighfoward node.js应用程序,具有正常的CRUD get / set / put /等api。也可以在Azure上从另一个客户端应用程序访问。如果我在本地计算机上都运行它们,它们运行正常。我将它们发布到Azure AppServices,并且客户端“ get”(获取所有记录)有效,但是删除,更新和添加所有失败均带有[]
polyfills-es2015.d3e61f0dd2b58e518eca.js:1从源'https://kurtmongoangular.azurewebsites.net'在'hhttps://kurttaskelementmongo.azurewebsites.net/elements/6'处对XMLHttpRequest的访问已被CORS政策阻止:仅支持跨源请求用于协议方案:http,数据,chrome,chrome扩展名,https。
正如所有网络文章所述,我进入了Azure门户,并将node.js服务器的Cors设置设置为*,并且我让其他应用正常运行。我希望使我失败的还有其他一些考虑因素。
这是客户端代码(使用Angular的http模块)
这里是拨打电话的角度代码:
import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { HttpClient } from '@angular/common/http'; import { Task } from './Task'; export interface Tasks { // I have no idea what this does!!! name: string; } @Injectable({ providedIn: 'root' }) // this makes this service injectable, Angular's dependecy injection model export class TaskService { constructor(private http: HttpClient) {} getAllTasks(): Observable<Task[]> { return this.http.get<Task[]>(' https://kurttaskelementmongo.azurewebsites.net/tasks/'); } getTask(taskName: string): Observable<Task> { return this.http.get<Task>('https://kurttaskelementmongo.azurewebsites.net/tasks/' + taskName); } insertTask(task: Task): Observable<Task> { return this.http.post<Task>('https://kurttaskelementmongo.azurewebsites.net/tasks/', task); } updateTask(task: Task): Observable<void> { return this.http.put<void>('https://kurttaskelementmongo.azurewebsites.net/tasks/' + task._id, task); } deleteTask(task: Task) { return this.http.delete('https://kurttaskelementmongo.azurewebsites.net/tasks/' + task._id); } }
//这是node.js app.js
const express = require("express");
const bodyParser = require("body-parser");
const taskController = require("./controllers/TaskController");
const elementController = require("./controllers/ElementContoller");
// this brings in and sets up the monog db instance connection
require("./config/db");
const app = express();
const port = process.env.PORT || 80; // setting the port number for this server
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// API ENDPOINTS
// not using the Express Router code, instead just listing them
app
.route("/tasks")
.get(taskController.listAllTasks)
.post(taskController.createNewTask);
app
.route("/tasks/:taskid")
.get(taskController.readTask)
.put(taskController.updateTask)
.delete(taskController.deleteTask);
// add new routes for my element table demo of Elements
app
.route("/elements")
.get(elementController.listAllElements)
.post(elementController.createNewElement);
app
.route("/elements/:_id")
.get(elementController.readOneElement)
.put(elementController.updateElement)
.delete(elementController.deleteElement);
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
我有一个使用常规CRUD get / set / put / etc api在azure上运行的straighfoward node.js应用程序。也可以在Azure上从另一个客户端应用程序访问。如果我在本地计算机上都运行它们,它们运行正常。我...
sideshowbaker是正确的!