读取文件时出现Node.js错误

时间:2017-09-06 09:58:29

标签: javascript node.js

我在node.js中编写代码,我想从文件中读取,然后将其导出到web api。问题是当我使用let时,我的代码出错了。

错误似乎出现在我的函数" render_html my views.js文件中:

"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()
}

我在"功能setHeaders"中也有问题。在router.js文件中:

"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!')
};

有人知道问题可能是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

关于你在“render_html”函数中的问题我认为问题是你缺少文件的编码,正如fs doc所说,如果你不设置编码,结果将是一个缓冲区。您可以使用以下方法轻松修复它:

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

(假设您使用utf8作为编码)

我认为你在“router.js”文件中的问题是你应该使用“writeHead”代替“writeHeader”,你可以在http doc中查看它。

我希望它能解决你的问题,问候。