-1

次のURLで完全に機能するcouchdb設計ドキュメントを作成しました http://localhost:5984/db/_design/app/index.html 。問題は、ページのコンテンツをフェッチしてノードjsから表示しようとしていますが、htmlページのみが表示され、リンクされたcssおよびjsファイルが機能せず、私は問題を絞り込もうとしましたが、css ファイルと js ファイルは、couchdb のログイン資格情報を持っていると思われ、リンクしていないことがわかりました。応答パラメーターに auth ヘッダーを追加しようとしましたが、まだ運がありません。

var http = require('http');

var json;
var root = new Buffer("admin:pass").toString('base64');
http.createServer(function(req, res) {
res.setHeader('Authorization', root);
res.writeHead(200, { 'Content-Type':'text/html' });
couchPage();
res.end(json);  
}).listen(8080);

function couchPage() {
var options = {
    hostname: 'localhost',
    port: 5984,
    path: '/db/_design/app/index.html',
    auth: 'admin:pass',
    method: 'GET'
};

var req = http.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        json = chunk;
    });
});

req.end();
}

どこが間違っているのか教えてください

4

1 に答える 1

0

これはcouchdbの承認とは何の関係もないと思います。問題は、nodejs サーバーでルーティングを実行しないことです。つまり、ブラウザは localhost:8080 にリクエストを送信し、応答として /db/_design/app/index.html のコンテンツを受け取ります。これで、ブラウザはスタイルシートへのリンク、たとえば「style.css」を検出します。localhost:8080/style.css へのリクエストを実行しますが、nodejs サーバーは単にリクエストの「style.css」部分を無視します。代わりに、クライアントは再び /db/_design/app/index.html のコンテンツを受け取ります!

nodejs を介して設計ドキュメントの添付ファイルを提供する場合は、最初にリクエストを解析してから、対応するドキュメントを couchdb から取得する必要があります。しかし、私はあなたが実際にこれをしたいとは思わない。nodejs の背後で (クライアントから直接アクセスできない) 従来の方法で couchdb を使用したい場合は、ディスクに保存された html (またはテンプレート) ファイルを使用してデータベースとして使用します。または、couchdb をクライアントに直接公開し、nodejs がcouchdb _changes フィードを介してイベントをリッスンするようにします。

于 2013-04-08T14:37:54.163 に答える