2017-09-06 15 views
0

node.jsにファイルを読み込んでWeb APIに書き出すコードを作成しています。問題は、letを使用しているときにコードにエラーが発生することです。Node.jsファイルの読み取り時にエラーが発生しました

エラーが私の機能であるように思われる「私のviews.jsファイルをrender_html:

"use strict"; 
const fs = require('fs'); 
const model = require('./model'); 


exports.car = (request, response, params) => { 
    if (Object.keys(params).length === 0) { 
     render_JSON(response, model.cars()) 
    }else{ 
     render_JSON(response, model.cars(parseInt(params.number))) 
    } 
}; 

function render_html(response, file) { 
    fs.readFile(file, (err, data) => { 
     if (err) { 
      console.error(err) 
     } else { 
      response.write(data); 
      response.end(); 
     } 
    }); 
} 

function render_JSON(response, object) { 
    const responseJSON = JSON.stringify(object); 
    response.write(responseJSON); 
    response.end() 
} 

私も中に問題を抱えている "router.jsファイル内の関数はsetHeaders":

"use strict"; 
const views = require('./views'); 
const url = require('url'); 


const routes = [ 
    { 
     url: ['/api/cars'], 
     view: views.car, 
     methods: ['GET'], 
     headers: {'Content-Type': 'application/json; charset=UTF-8'} // application/json as per RFC4627 
    }]; 

function setHeaders(response, headers = {'Content-Type': 'text/plain'}, code = 200) { 
    response.writeHeader(code, headers); 
} 

// Filters trailing slash in the url 
// for example allowing /api/cars and /api/cars/ to be treated equally by removing trailing slash in the second case 
function filterURL(requestURL) { 
    if (requestURL.pathname.endsWith('/')) { 
     requestURL.pathname = requestURL.pathname.replace(/\/$/, ''); 
    } 
} 

exports.route = (request, response) => { 
    for (let r of routes) { 
     const requestURL = url.parse(request.url, true); 
     // url matched and correct method 
     //if requestURL.pathname 
     filterURL(requestURL); 
     if (r.url.includes(requestURL.pathname) && r.methods.includes(request.method)) { 
      if (r.headers) { 
       setHeaders(response, r.headers); 
      } else { 
       setHeaders(response) 
      } 

      r.view(request, response, requestURL.query); 
      return; 
     }// if unsupported HTTP method 
     else if (r.url.includes(requestURL.pathname) && !r.methods.includes(request.method)) { 
      setHeaders(response, undefined, 405); 
      response.end(); 
      return; 
     } 
    } 
    // if route not found respond with 404 
    setHeaders(response, undefined, 404); 
    response.end('404 Not Found!') 
}; 

サムバディ問題が何であるか知っていますか?

ありがとうございます。

+0

render_html()関数のfile変数には何が含まれていますか?ファイルが来てどこからファイルvariableに設定されていますか? fs.readFile()関数を使用しているときには、ファイル名のファイルのパスを与える必要があります。 –

答えて

0

"render_html"関数fs docは、エンコーディングを設定しないと結果がバッファになると言うと、ファイルのエンコーディングが欠落していると思います。あなたは簡単に使用してそれを修正することができます:

fs.readFile(file, 'utf8', callback) 

(あなたはエンコーディングとしてUTF8を使用していると仮定すると)そして、私は「router.js」ファイルで、あなたの問題を考えて、あなたが使用する必要がありますされる「書込みヘッド」の代わりに「writeHeaderあなたはhttpの文書で確認できます。

私はあなたの問題、挨拶を解決することを願っています。

関連する問題