2017-10-01 7 views
0

エクスプレスでクライアントファイルがルート機能をどのように見つけているかを把握していました。マイアプリの構造は、クライアント側のHTMLは/public/filesである打撃、のようになり、そのようExpressでのルートパスの使用方法は?

|-root 
    |--public 
    |---files 
    |---scripts 
    |---css 
    |--views 
    ... 

です。 http://localhost:3000/files/like_animal.htmlに正しくレンダリングできます。

<html> 
<body> 
    <form action="/handleForm" method="post"> 
    name: <input name="usename"><br> 
    I like <input name="animal"><br> 
    <input type="submit" value="Go"> 
    </form> 
</body> 
</html> 

ザ・JSファイルは

var express = require('express'); 
var app = express(); 
var path = require('path'); 

app.use(express.static(path.join(__dirname + 'public'))); 
console.log('start'); 

var bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.use('/handleForm', (req, res) => { 
    var name = req.body.name; 
    var animal = req.body.animal; 
    console.log(name + " " + animal); 
    res.send('Thank you'); 
}); 

app.listen(3000, () => { 
    console.log('Listening on port 3000'); 
}); 

は、今私は、私はこれは私が /public/filesでさえも、 /public/scriptsまたは rootでそれを入れてみました。で、ファイルをJS置くべき場所を確認していない、というようなものです。しかし、何も動作しません。フォームを送信するたびに、ブラウザは常に Cannot POST /handleFormと表示されます。明示的に1週間の初心者として、私は完全に失われています。どんなヒントも高く評価されます。どうもありがとう。

+1

「path.join」を使用していますが、「path.join」を使用して結合を行っていません。 :)それは 'path.join(__ dirname、 'public')' ..そして@faresoftのように、通常はPOSTリクエストに 'use'を使用しないと言っていますが、app.postが良いでしょう。 – Keith

+0

私は、すべてのルータ機能を、ノードサービスの開始に使用されている同じファイルの下に置くべきであることを理解しています。私はこの概念を正しく理解しましたか? –

答えて

1

スクリプトをrootに置き、次にこのような一般のパスを指定する必要があります。

app.use(express.static(path.join(__dirname, 'public'))); 

もう1つのメモ、app.useは、ミドルウェアを作成するために使用されます。 app.postを使用して経路を定義する必要があります。

app.post('/handleForm', (req, res) => { 
    // ... 
}); 
+1

ただあなたの 'path.join'を変更してください、それは' path.join(__ dirname、 'public') ' – Keith

+0

あなたの迅速な対応に感謝します。私はタイプミスを修正し、 'use'を' post'に調整し、 'handleform.js'を' root'で動かします。それでも同じエラー。私はすでに 'root'に' index.js'を持っていました。紛争があると思いますか? –

関連する問題