Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 404请求快车路线时_Javascript_Node.js_Ajax_Express_Fetch - Fatal编程技术网

Javascript 404请求快车路线时

Javascript 404请求快车路线时,javascript,node.js,ajax,express,fetch,Javascript,Node.js,Ajax,Express,Fetch,我试图了解express及其处理路线的方式 我用以下结构设置了一个域 / app.js /public_html index.html 在app.js中,我设置了我的express服务器: let app = express(); app.post('/list', (request, response) => { //get data then... response.send(data) }); app.use(express.static('pu

我试图了解express及其处理路线的方式

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

/
  app.js
    /public_html
      index.html
在app.js中,我设置了我的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');
});
我使用
节点app.js运行应用程序

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

fetch('/list').then(function(response) {
  console.log(response)
})
但我得到了404作为回应

有几件事我有点困惑:

  • 默认情况下,我的web服务器(Apache/Ubuntu)设置为在public_html目录之外提供html。这是否意味着我的整个节点应用程序结构需要移动到public_html文件夹中,而实际的html则需要移动到
    static
    文件夹或其他什么地方

  • 港口呢?节点应用程序监听端口3000-但我不确定如何(或是否)专门向该端口发出请求

  • 路由路径-我正在发布到
    /list
    ,但它应该是
    。/list


  • 我尚未找到此应用程序的有效配置。任何帮助都将不胜感激

    使用以下代码。使用ajax而不是fetch,方法必须是POST。默认情况下,Fetch为get请求,因此无法工作

    选项1

        $.ajax({
           method: "POST",
           url: "/list"
          })
         .done(function( msg ) {
          alert( "Data " + msg );
      });
    
    选项2 仅更改以下代码=>POST以获取

    app.get('/list', (request, response) => {
      //get data then...
      response.send(data)
    });
    
    选项3 在fetch中使用POST

    fetch("/list",
    {
        method: "POST"
    })
    .then(function(data){  alert( "Data " + data ); })
    
    感谢@提出了选项3

    默认情况下,我的web服务器(Apache/Ubuntu)设置为在public_html目录之外提供html。这是否意味着我的整个节点应用程序结构需要移动到public_html文件夹中,而实际的html则需要移动到静态文件夹或其他什么地方

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

    港口呢?节点应用程序监听端口3000-但我不确定如何(或是否)专门向该端口发出请求

    由于Apache可能已经在侦听端口80,因此您发送到的任何请求都将命中您的Apache服务器。相反,您必须发出包含端口号的请求,这些请求将命中Node.js服务器

    路线路径-我正在发布到/list,但是否应该是../list

    不,您应该将帖子发送到/列出,并考虑Rakesh在其回答中提出的所有要点,以便正确匹配从客户端到服务器的帖子,或者如果更合适,则切换到GET。与第二点一样,请确保您正在向而不仅仅是向发布。正如您所指出的,一个是Apache,另一个是Node.js

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

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

    这样,您放在public_html文件夹中的所有文件都可以在您的应用程序中导航,其中包括与Apache相关的所有内容。注意
    \uuu dirname
    始终是当前正在执行的脚本运行的目录。若要访问此网站,只需在浏览器中转到,您就会看到您的索引文件。

    /list
    是一个发布路线,您可以通过GET访问它。使用
    app.get('/list',
    获取要尝试,请创建一个app.get(),然后从web浏览器手动访问它
    fetch
    如果您只是告诉它使用POST,它也可以使用POST。请参阅