0

Node.jsは初めてです。iPhoneクライアントへのサーバーバックエンドとして使用しています。JSONを使用してPOSTを呼び出しています:{名: "bob"、メール:bob@someemail.com}

node.jsコードは次のようになります(ExpressとMongooseを使用)。

var User = new Schema({
    firstname   : { type: String, required: true}
    , email     : { type: String, required: true, unique : true}

});
var User = mongoose.model('User', User);

そしてPOSTの場合、

app.post('/new/user', function(req, res){

    // make a variable for the userData
    var userData = {
        firstname: req.body.firstname,
        email: req.body.email
    };

    var user = new User(userData);

    //try to save the user data
    user.save(function(err) {
        if (err) {
            // if an error occurs, show it in console and send it back to the iPhone
            console.log(err);
            res.json(err);
        }
        else{
            console.log('New user created');
        }
    });

    res.end();
}); 

現在、同じメールアドレスで重複ユーザーを作成しようとしています。私はこれが私が電子メールに持っている「ユニークな」制約のためにエラーをスローすることを期待しています-それはそうします。

ただし、node.jsプロセスは、「エラー:送信後にヘッダーを設定できません」で終了します。

このようなシナリオでiPhoneクライアントにメッセージを送り返すことができるようにしたいと思います。たとえば、上記では、新しいユーザーの作成の結果(成功または失敗)を示すJSONをiPhoneに返送できるようにしたいと思います。

ありがとうございました!

4

2 に答える 2

3

これは、コードの非同期性によるものです。あなたres.end()のコールバック関数の前に実行され、そのコールバック内user.saveに配置する必要がありres.end()ます(最後に)。

こちらです:

  user.save(function(err) {
    if (err) {
        // if an error occurs, show it in console and send it back to the iPhone
        console.log(err);
        return res.json(err);
    }
    console.log('New user created');
    res.end();
});
于 2013-02-14T08:39:49.457 に答える