javascript - Node Js - Angular Coss Origin Policy Error on - POST/GET/PUT - 方法
问题描述
我在 node js 中创建了一个带有后端的网站,但目前有人还负责开发 Angular 应用程序。例如创建帖子的节点结构。
路线结构
-app.js
const postRoutes = require('./routes/postRoutes');
-控制器/postController.js
exposts.createPosts = async(req,res)=>{
const create = await Post.create(req.body);
res.status(201).json({
status:"success",
data:create
});
}
-routes/postRoutes.js
router.route('/create-post').post(postController.createPosts);
这就是我使用猫鼬结构创建新帖子并将数据插入数据库的方式。
要将数据从 UI 插入数据库,我使用 axios。
-public/js/main.js
import {createPostFnc} from './createPost';
const create_posts= document.querySelector('#form');
if(create_posts){
create_posts.addEventListener('submit',(createPos)=>{
createPos.preventDefault();
const postData = new FormData();
postData.append('title',document.getElementById('input1').value);
postData.append('link',document.getElementById('input2').value);
postData.append('description',document.getElementById('input3').value);
createPostFnc(postData );
});
}
-public/js/createPost.js
import axios from 'axios';
import { showAlert } from './alert';
import { showAlertPost } from './alert-post';
export const createPostFnc = async(dataPost) =>{
try{
const post = await axios({
method:"POST",
url:"{url}/api/v3/posts/create-post",
data:dataPost
});
if(post.data.status === 'success'){
showAlertPost('post-success','Processing');
window.setTimeout(()=>{
location.assign('/persona-profile');
}, 1500);
}
}catch(err){
showAlert('error','There was a problem creating yout post!!!');
console.log(err);
}
}
到目前为止,一切都很好!!!但是在角度上,当尝试在 url 之后创建一个帖子时,会收到此错误。
我在创建帐户和登录路由时遇到了同样的错误,我通过添加app.js解决了这个错误。
//Allow Cross Origin Platform
app.use(function(req ,res ,next){
res.header("Access-Control-Allow-Origin","*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept,
Authorization");
next();
});
但是对于发布路线它不起作用,在我尝试使用cors 模块解决问题之后
我试过类似的东西。 -routes/postRoutes.js
const cors = require('cors')
router.route('/create-post').post(cors(),postController.createPosts);
作为解决问题的简单方法,但它不起作用。如何解决此错误,以便它可以允许应用程序和服务器之间的交互。
注意:我是一年以下经验的node js新手。
解决方案
正确设置标题
// Add headers
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
推荐阅读
- python - 即使存在,Python Web 抓取脚本也无法通过 xPath 找到元素
- openam - 如何让 OpenAM 通过简单的用户名和密码认证返回 jwt-token
- python-3.x - 如何在 Elasticsearch 中最好地存储时间序列数据?
- python - 如何从整数的第 n 个元素(collatz 序列)开始显示答案?
- reactjs - 谷歌浏览器的formik输入自动填充
- google-chrome - 如何开启闪光灯?
- xaml - Xamarin.Forms XAML RelativeLayout:定义一个高度,其余部分动态填充
- qt - 如何向 TreeView 添加值?
- javascript - React Native 如何获取设备的方向
- javascript - 使用 jQuery 兄弟功能检查至少一个复选框