5

バックボーン フレームワークと連携するために、Node.JS で REST Web サービスを開発しています。urlRoot:http://localhost:3000/usersを使用して Person モデルを定義し、投稿リクエストの受信時にデータベースに人物を追加するリクエスト ハンドラーを作成しました。

app.post('/users', user.add(db));

exports.add = function(db){
    return function(req,res){

        console.log(req.body);

        var name = req.body.name;
        var age = req.body.age;
        var sex = req.body.sex;
        var job = req.body.job;

        var peopleDb = db.get('people');

        peopleDb.insert({
            'name':name,
            'age':age,
            'sex':sex,
            'job':job
        },function(e,docs){
            if(e){
                console.log(e);
            }else
            {
                res.setHeader('Content-Type','application/json');
                res.setHeader('Access-Control-Allow-Origin','*');
                res.setHeader('Access-Control-Allow-Methods','GET,PUT,POST,DELETE');
                res.writeHead(200);
                res.end(JSON.stringify(docs));
            }
        });
    }
}

コードを実行しようとすると、コンソールに次のように表示されます。

Origin http://localhost is not allowed by Access-Control-Allow-Origin.

私はヘッダーを追加することを他の回答から読みました:Access-Control-Allow-Origin:*そしてAccess-Control-Allow-Methods:GET,PUT,POST,DELETE問題を解決するでしょうが、それは私にとってはうまくいきませんでした。これらのヘッダーを .htaccess ファイルに入れてみましたが、うまくいきませんでした。

コードに何か問題があるか、この問題の解決策があるかどうか誰か教えてもらえますか?

4

2 に答える 2

19

使用している場合は、ミドルウェアを作成する代わりに、 corsパッケージを使用して CORS を許可するexpressことができます。

var express = require('express')
, cors = require('cors')
, app = express();

app.use(cors());

app.get(function(req,res){ 
  res.send('hello');
});
于 2013-11-02T14:18:32.833 に答える
7

OPTIONSHTTP メソッドと同じパスを使用する場合は、レスポンスを実装する必要があります。Express アプリ全体で CORS を許可するための次のコードがあります。

var app = express()
app.use(function(req, res, next) {
    if (req.headers.origin) {
        res.header('Access-Control-Allow-Origin', '*')
        res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type,Authorization')
        res.header('Access-Control-Allow-Methods', 'GET,PUT,PATCH,POST,DELETE')
        if (req.method === 'OPTIONS') return res.send(200)
    }
    next()
})
// configure your routes
于 2013-11-02T14:10:43.160 に答える