最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Express网站上的api路由不起作用

IT培训 admin 3浏览 0评论

Express网站上的api路由不起作用

我是expressjs的新手,必须接管使用此框架的项目。 index.html和html模板位于public/文件夹中。该项目使用api端点从db获取信息。例如,该端点应该返回已注册用户的列表:

本地主机/ API / V1 /用户

但是,/api/v1/users的路由不起作用,并返回404页面未找到错误。

这是我可以在代码中找到的路由的相关部分:

| -app.js

app.use('/api', allowCrossDomain, require('./routes')());

| -route / index.js

let express = require('express');

module.exports = function () {
    let app = express.Router();
    app.use('/v1', require('./v1')());
    return app;
};

| -route / v1 / index.js

let express = require('express');

module.exports = function () {
    let app = express.Router();
    app.use('/users', require('./users')());
    return app;
};

| -route / v1 / users.js

let express = require('express');
let db = require('../../lib/db');
let dbUtils = require('../../lib/dbUtils');

module.exports = function () {
    let app = express.Router();

    app.get('/', function (req, res) {
        let q = db.select('*', db.raw("CONCAT(first_name, ' ', last_name) AS full_name")).from('users');

        dbUtils.sendResponse(q, req, res);
    });

    return app;
}

| -lib / dbUtils.js

function sendResponse(q, req, res, single, subQueries) {
    let query = applyTransformations(q, req);

    query.then(function (data) {
        if (!data || !data.length && single) {
            res.sendStatus(404);
            return;
        }

        if (subQueries && subQueries.length) {
            return handleSubquery(data, subQueries)
        }

        return data;
    }).then(function (data) {
        if (single && data[0] && data.length === 1) {
            data = data[0];
        }

        res.json(data);
    }, function (err) {
        res.status(400).send(err);
    }).catch(function (err) {
        res.status(500).send(err);
    })
}

也许问题是nginx如何处理路由?这是我的Nginx配置:

server {

    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name localhost;
    root /var/www/app;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }
}
回答如下:

我认为您在使用路由器时没有错。但是我在您的项目中有一些问题。-请确认users.js的路径。作为您的代码,其路径必须是route / v1 / users / index.js。-您可以检查路由器是否正常工作。您可以将下面的代码插入index.js文件。 app.get('/', function(req,res) { console.log('ok'); }

Express网站上的api路由不起作用

我是expressjs的新手,必须接管使用此框架的项目。 index.html和html模板位于public/文件夹中。该项目使用api端点从db获取信息。例如,该端点应该返回已注册用户的列表:

本地主机/ API / V1 /用户

但是,/api/v1/users的路由不起作用,并返回404页面未找到错误。

这是我可以在代码中找到的路由的相关部分:

| -app.js

app.use('/api', allowCrossDomain, require('./routes')());

| -route / index.js

let express = require('express');

module.exports = function () {
    let app = express.Router();
    app.use('/v1', require('./v1')());
    return app;
};

| -route / v1 / index.js

let express = require('express');

module.exports = function () {
    let app = express.Router();
    app.use('/users', require('./users')());
    return app;
};

| -route / v1 / users.js

let express = require('express');
let db = require('../../lib/db');
let dbUtils = require('../../lib/dbUtils');

module.exports = function () {
    let app = express.Router();

    app.get('/', function (req, res) {
        let q = db.select('*', db.raw("CONCAT(first_name, ' ', last_name) AS full_name")).from('users');

        dbUtils.sendResponse(q, req, res);
    });

    return app;
}

| -lib / dbUtils.js

function sendResponse(q, req, res, single, subQueries) {
    let query = applyTransformations(q, req);

    query.then(function (data) {
        if (!data || !data.length && single) {
            res.sendStatus(404);
            return;
        }

        if (subQueries && subQueries.length) {
            return handleSubquery(data, subQueries)
        }

        return data;
    }).then(function (data) {
        if (single && data[0] && data.length === 1) {
            data = data[0];
        }

        res.json(data);
    }, function (err) {
        res.status(400).send(err);
    }).catch(function (err) {
        res.status(500).send(err);
    })
}

也许问题是nginx如何处理路由?这是我的Nginx配置:

server {

    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name localhost;
    root /var/www/app;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }
}
回答如下:

我认为您在使用路由器时没有错。但是我在您的项目中有一些问题。-请确认users.js的路径。作为您的代码,其路径必须是route / v1 / users / index.js。-您可以检查路由器是否正常工作。您可以将下面的代码插入index.js文件。 app.get('/', function(req,res) { console.log('ok'); }

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论