2013-03-19 25 views
5

Tôi đang sử dụng Windows Azure để triển khai một ứng dụng node.js mà tôi đã viết cho thấy một API REST CRUD khá đơn giản cho các máy khách. Nó được lưu trữ trong một trang web Windows Azure và sử dụng MongoDB thông qua cửa hàng Windows Azure với mongoose. Các yêu cầu tôi thực hiện đối với dịch vụ là JSON và các câu trả lời là JSON (không chắc chắn rằng vấn đề nhưng những người khác đã nói về 400 câu trả lời cho các yêu cầu với Content-Type application/json)Yêu cầu đầu tiên cho ứng dụng node.js trên Windows Azure với MongoDB sản lượng 400 Yêu cầu không hợp lệ

Khi truy cập đầu tiên trong trong khi đó, ứng dụng trả về 400 Yêu cầu không hợp lệ. Miễn là tôi giữ cho ứng dụng "ấm" bằng cách nhấn nó thường xuyên (ít nhất một lần một phút hoặc lâu hơn) - tôi không bao giờ có vẻ để có được điều này một lần nữa.

Không quan trọng đối với cài đặt chia tỷ lệ lưu trữ - Tôi nhận được điều tương tự trên tầng miễn phí như ở chế độ dành riêng.

Có ai khác nhìn thấy điều này không?

+4

Điều này có thể liên quan đến việc tái chế tự động trong IIS. Nếu không hoạt động, quá trình lưu trữ được tái chế, vì vậy bạn đã mất bất kỳ trạng thái nào (có thể là kết nối mongodb của bạn). Bạn có thể thử một số loại kết nối liên tục hoặc mã để khôi phục từ kết nối bị hỏng trong ứng dụng của bạn –

+1

Bạn có kiểm tra nhật ký và yêu cầu thêm thông tin về lỗi không? –

+0

Bạn đã thử chế nhạo phần MongoDB và kiểm tra xem nó vẫn trả về 400 theo yêu cầu đầu tiên chưa? –

Trả lời

1

Để đảm bảo quyền truy cập vào bất kỳ kết nối trong Node.js, bạn cần phải đặt tất cả các mã mà đòi hỏi một kết nối bên trong của cuộc gọi lại. Cách mà con điếm cho thấy kết nối này là thông qua một sự kiện. Khi sự kiện 'mở' được gọi bằng kết nối mongoose, thì bạn có quyền truy cập vào kết nối cơ sở dữ liệu.

I.E.

mongoose.connect('details'); 

mongoose.on('open', function() { 
    var connection = mongoose.connection; 

    // Do things with your connection here 
    doThings(connection); 
}); 

function doThings(connection) { 
    app.get(...); 
} 
0

Sẽ hữu ích nếu bạn có đoạn mã, nhưng tôi đoán là kết nối của bạn với mongo đang diễn ra không đồng bộ và trang web của bạn đang phân phối yêu cầu trước khi kết nối thực sự mở.

Tôi đã thử nghiệm trường hợp này và không thể tạo lại vấn đề. Bạn có thể xem mã của tôi tại đây: https://github.com/ntotten/azure-mongo-sample

Về cơ bản, tôi đang sử dụng mongoose để kết nối và kết nối đang diễn ra ngay khi ứng dụng được tải. Bạn có thể xem mã bên dưới.

app.js:

/** 
* Module dependencies. 
*/ 

var express = require('express') 
    , routes = require('./routes') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path'); 

var TaskList = require('./routes/tasklist'); 
var taskList = new TaskList(process.env.CUSTOMCONNSTR_MONGOLAB_URI); 

... 

tasklist.js:

var mongoose = require('mongoose') 
    , task = require('../models/task.js'); 


module.exports = TaskList; 


function TaskList(connection) { 
    mongoose.connect(connection); 
} 

... 
+0

Cảm ơn Nathan - Tôi đã thử cách tiếp cận của bạn và tôi vẫn có thể repro vấn đề. Mã của tôi ở đây https://github.com/timfpark/nodejs-azure-mongodb – outside2344

Các vấn đề liên quan