http.createServer( function (req, res) { // 添加响应头 res.setHeader( "Access-Control-Allow-Origin" , "*" ); // 获取请求路径 var pathname = url.parse(req.url).pathname; var query = url.parse(req.url, true ).query; // 关闭nodejs 默认访问 favicon.ico if (!pathname.indexOf( '/favicon.ico' )) { return ; // 路由器处理 route(handle, pathname, query, res); }).listen( 8080 );

2.使用express:

var express = require('express');
var app = express();
//设置跨域访问
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",' 3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
app.get('/getdata', function(req, res) {
    res.send({id:req.params.id, name: req.params.password});
app.listen(3000);
console.log('Listening on port 3000...');

如果报错Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
可能原因是header里面包含自定义字段,浏览器先发一次options请求,如果请求通过,则继续发送正式的post请求,而如果不通过则返回以上错误。

所以得在服务端配置options的请求返回,判断请求的方法是options的时候,返回ok(200)给客户端。

/*允许跨域 */
router.use(function(req, res, next) {
    //console.log(req);
    console.log(req.method);
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'OPTIONS,GET,POST,PUT,DELETE');
    res.header("Access-Control-Allow-Headers", "Origin,X-Requested-With,Content-Type,Accept,Authorization");
    res.header("cache-control", "no-cache");
    res.header("content-type", "application/json; charset=utf-8");
    res.header("ETag", '');
    //header头信息设置结束后,结束程序往下执行,返回
    if(req.method.toLocaleLowerCase() === 'options'){
        res.status(204);
        return res.json({});   //直接返回空数据,结束此次请求
    }else{
        next();

还是报错的话设置Headers为:

 response.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token");
app.all("*", function (req, res, next) { //设置允许跨域的域名,*代表允许任意域名跨域 res.header("Access-Control-Allow-Origin", "*"); //允许的header类型 res.header("Access-Contro1-Allow-Headers", "content-typ 跨域:本质是浏览器基于的一种安全手段同源策略:是一种约定,他是浏览器最核心也最基本的安全功能当以上三个有任意一项不同时,就会触发同源策略,就会产生跨域我们会把触发了同源策略的请求,叫做跨域请求。 app.all('*', function (req, res, next) { // 设置请求为允许跨域 res.header('Access-Control-Allow-Origin', '*'); // 设置服务器支持的所有信息... 文章目录NodeJS应用的内存上限该内存上限由谁决定?如何修改该内存上限?环境变量的修改方式Windows 仅当前窗口有效Windows 永久有效(仅用户级别)Windows 永久有效(系统级别)类unix系统(Linux/macOS)通用方式Others其他相关nodejs参数如何用命令行打开用户级别的环境变量编辑窗口? NodeJS应用的内存上限 该内存上限由谁决定? NodeJS启动的应用,内存使用是有上限的。 默认为4GB(不同机器环境可能会有不同)。 那么,如何自己指定这个内存上限呢(我机器配置足 在node上处理OPTIONS请求 学习cors跨域问题种,非简单请求时,浏览器会发送一个预请求询问服务端,能否通过同源策略检查,这个预请求是OPTIONS类型的。 在使用原生node构建的服务中,需要对OPTIONS请求方法进行处理。 const http = require('http'); .createServer(function (request, response) { if (request.method == 'OPTIONS') { response. Access-Control-Max-Age:预请求结果缓存。Access-Control-Allow-Headers:设置信息(自定义不允许 所以需要在响应前接收的任意请求)Access-Control-Allow-Credentials: 跨域请求时候,是否允许携带验证信息(cookie)Access-Control-Expose-Headers:暴露部信息,客户端同意的哪些可以暴露。Access-Control-Allow-Methods:设置请求允许的方法。http和http不需要。 app.use(express.urlencoded({ extended: false })); const apiRouter = require('./14apiRouter'); // 把路由模块,注册到 app 上 app.use('/api', CORS是一个W3C标准,Cross-origin resource sharing,跨域资源共享,允许浏览器向跨源服务器发出XMLHttpRequest请求,解决了AJAX只允许同源使用的限制。,单位为秒,在此期间不用发出另一条预检请求,不指定时即使用默认值,Chrome默认5秒。字段,取值可以是请求时Origin字段的值,也可以是*,表示接受任意域名的请求。字段,取值是逗号分隔的一个字符串,设置服务器支持的跨域请求的方法。请求分为简单请求和非简单请求,非简单请求会发送预检请求。字段,布尔值类型,表示。