Node.js 为什么Next.js将静态文件作为参数传递给url?

Node.js 为什么Next.js将静态文件作为参数传递给url?,node.js,express,next.js,Node.js,Express,Next.js,首先,我得到了一个错误: Fetch API无法加载file:///xxxx/web-frontend/node_modules/axios/lib/core/createError.js. 对于CORS请求,URL方案必须为“http”或“https”。 我不知道为什么会这样。然后,我在Python后端API控制台中看到以下消息: [10/Dec/2019 14:24:54] "GET /api/main_get/boards/b/ HTTP/1.1" 500 17478 [10/Dec/20

首先,我得到了一个错误:
Fetch API无法加载file:///xxxx/web-frontend/node_modules/axios/lib/core/createError.js. 对于CORS请求,URL方案必须为“http”或“https”。

我不知道为什么会这样。然后,我在Python后端API控制台中看到以下消息:

[10/Dec/2019 14:24:54] "GET /api/main_get/boards/b/ HTTP/1.1" 500 17478
[10/Dec/2019 14:24:54] "GET /api/main_get/ HTTP/1.1" 200 87
[10/Dec/2019 14:24:54] "GET /api/main_get/ HTTP/1.1" 200 87
Not Found: /api/main_get/boards/_stream_readable.js/
Not Found: /api/main_get/boards/events.js/
[10/Dec/2019 14:24:54] "GET /api/main_get/boards/_stream_readable.js/ HTTP/1.1" 404 30
[10/Dec/2019 14:24:54] "GET /api/main_get/boards/events.js/ HTTP/1.1" 404 30
然后我决定在Node.js控制台中记录参数。我得到:

{ abbr: 'b' }
{ abbr: 'events.js' }
{ abbr: '_stream_readable.js' }
我的前端服务器设置:

const express = require('express');
const next = require('next');

const port = +process.env.PORT || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
    const server = express();

    server.get('/boards/:abbr', (req, res) => {
        console.log(req.params);
        return app.render(req, res, '/boards', { abbr : req.params.abbr });
    })

    server.all('*', (req, res) => {
        return handle(req, res);
    });

    server.listen(port, err => {
        if (err) throw err;
        console.log(`Server is listening on port ${port}!`);
    })
});

为什么Express/Next.js服务器将文件识别为“abbr”参数

该错误是由API引起的。我在DB中手动创建了线程,但忘记了在第一篇文章中分配它们。

由于
getInitialProps
在一次页面加载时多次触发,因此出现了此问题。但是为什么这个方法被多次调用而不是一次呢?您在这里得到了正确的预期结果吗?我推测它会在这里呈现带有不正确URL的链接
/boards/${el.abbr}
,这些链接会被预加载。您的api是否提供内容类型正确的数据?是的。API和它有什么关系?问题是Node.js服务器试图通过用于获取页面内容的同一个动态uri获取静态文件,并将文件名传递给“abbr”参数。当我尝试获取“localhost:3000/boards/b”时,该错误是由API引起的。我在DB中手动创建了线程,但忘记了第一次分配它们。我遇到了同样的问题,但我不理解这个解决方案。你能详细说明一下吗?结果证明我从传递到getInitialProps的ctx对象中获取了错误的属性(我使用的是ctx.req.query而不是ctx.query)