404请求expression路由时

我想了解快递和它如何处理路线。

我有一个域设置了以下结构

/ app.js /public_html index.html 

在app.js中,我build立了我的express服务器:

 let app = express(); app.post('/list', (request, response) => { //get data then... response.send(data) }); app.use(express.static('public_html')) app.listen(3000, function(){ console.log('listening'); }); 

我运行与node app.js的应用程序

然后,在public_html目录的index.html中,我试图请求数据。 我只是做了一个简单的:

 fetch('/list').then(function(response) { console.log(response) }) 

但是我得到了一个404作为回应。

我对以下几件事有点困惑:

  1. 我的networking服务器(Apache / Ubuntu)默认设置为从public_html目录中提供html。 这是否意味着我的整个节点的应用程序结构需要被移动到public_html文件夹和实际的HTML移动到一个static文件夹或东西?

  2. 那么港口呢? 节点应用程序在端口3000上侦听 – 但是我不确定如何(或如果)特别向端口发出请求。

  3. 路线path – 我张贴到/list但应该是../list

我还没有find适用于这个应用程序的configuration。 任何帮助,将不胜感激。

       

网上收集的解决方案 "404请求expression路由时"

我的networking服务器(Apache / Ubuntu)默认设置为从public_html目录中提供html。 这是否意味着我的整个节点的应用程序结构需要被移动到public_html文件夹和实际的HTML移动到一个静态文件夹或东西?

Node.js和Apache可以使用相同的静态文件夹而不会发生冲突,但是它们都不能在相同的端口上侦听。 很可能你的Apache服务器已经在端口80上运行了。如果你的Node.js服务器在端口3000上运行,那么端口80的请求将与你在应用中写入的路由不匹配,因此404会返回(除非你有相同的路由在一个单独的Apache托pipe应用程序)。

那么港口呢? 节点应用程序在端口3000上侦听 – 但是我不确定如何(或如果)特别向端口发出请求。

由于Apache可能已经在端口80上进行侦听,所以发送给http:// localhost的任何请求都将触发Apache服务器。 相反,您必须发出包含端口号的请求, http:// localhost:3000将会击中您的Node.js服务器。

路线path – 我张贴到/列表,但应该是../list?

不,你应该发布到/ list,并且考虑到Rakesh在他的回答中所做的所有要点,以便你正确地匹配POST到POST,或者如果更合适的话,切换到GET。 如第二点,请确保您发布到http:// localhost:3000 ,而不仅仅是http:// localhost 。 正如你所指出的,一个是Apache,另一个是Node.js

最后,这里是我从一个与我的应用程序脚本相邻的文件夹提供的静态服务器代码行:

 app.use('/', express.static(__dirname + '/public_html')); 

有了这个,你放在public_html文件夹中的所有文件都可以在你的应用程序中导航,其中包括Apache相关的所有东西。 注意__dirname始终是运行当前正在执行的脚本的目录。 要访问此网站,只需在浏览器中访问http:// localhost:3000 ,即可看到您的索引文件。

使用下面的代码。 使用ajax而不是fetch,而且方法必须是POST。 由于默认情况下获取请求,因此提取不起作用。

选项1

  $.ajax({ method: "POST", url: "/list" }) .done(function( msg ) { alert( "Data " + msg ); }); 

选项2仅更改以下代码=> POST以GET

 app.get('/list', (request, response) => { //get data then... response.send(data) }); 

选项3在提取中使用POST

 fetch("/list", { method: "POST" }) .then(function(data){ alert( "Data " + data ); }) 

感谢@ vessebuild议选项3

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch