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