2017-08-28 4 views
0

stackoverflowにここで提案のような単純なサーバーを書きますまた、クエリ文字列(URLのサンプル要求:bookinghandler?sender=100000250242810&[email protected]&hotelName=Grand Hotel&confirmNumber=654321&startDate=2017-10-11&endDate=2017-10-15)でパラメータを取得したいクエリ文字列変数が4

しかし、req.params,req.param(),req.body,req.queryはまだ空です。私は間違っているの?それはrequire('url')またはrequire('qs')を介して行う唯一の方法ですか?私は明示的にしかそれをしたくないのですか?私の端末で

+0

ハム通常は、クエリパラメータを探しているなら、それは無いGETメソッドでなければなりませんか? 'app.get(...)' –

+0

@MarcoTalentoおそらくGETは私にとってもうまくいきません - すべて空です。 –

+0

変更の際に、サーバーを再起動するのを忘れましたか? – Boaz

答えて

0

2つのRESTフレームワークを使用して問題が発生しました.Express and restify。アプリケーション全体を復元または表現する必要があります。私はサーバーを再構築する前に、別の高速サーバーが作成された(別の例を取っ​​た)。一般的にどちらか一方を使用する必要があり、両方を使用する必要はありません。

修正app.js:

// This loads the environment variables from the .env file 
require('dotenv-extended').load(); 

const builder = require('botbuilder'); 
const restify = require('restify'); 

// Setup Restify Server 
var server = restify.createServer(); 
server.use(require('restify-plugins').queryParser()); 
server.listen(process.env.port || process.env.PORT || 3978, function() { 
    console.log('%s listening to %s', server.name, server.url); 
}); 

// Index route 
server.get('/', function (req, res) { 
    res.send('My chat bot') 
}); 

// Create chat connector for communicating with the Bot Framework Service 
var connector = new builder.ChatConnector({ 
    appId: process.env.MICROSOFT_APP_ID, 
    appPassword: process.env.MICROSOFT_APP_PASSWORD 
}); 

// Listen for messages from users 
server.post('/api/messages', connector.listen()); 

var bot = require("./bot") 
bot.InitializeBot(connector); 

// Load REST API module 
var restApi = require("./rest_api"); 

// POST request from webview page 
server.post('/bookinghandler', restApi.BookingHandler); 

修正rest_api.js:

const service = require("./service"); 

module.exports.BookingHandler = async function (req, res, next) { 
    let senderId = req.query.sender; 
    let email = req.query.email; 
    let hotelName = req.query.hotelName; 
    let confirmNumber = req.query.confirmNumber; 
    let start = req.query.startDate; 
    let end = req.query.endDate; 

    res.send(200); // Success 
    return next(false); 
}; 
0
app.post('/bookinghandler', function (req, res) { 
     let senderId = req.query.sender; 
     let email = req.query.email; 
     let hotelName = req.query.hotelName; 
     console.log(req.query, senderId, email, hotelName) 
}) 

プリントこの出力

{ sender: '100000250242810', email: '[email protected]', hotelName: 'Grand' } '100000250242810' '[email protected]' 'Grand'

+0

アドバンストRESTクライアントを使用してリクエストを送信するか、ブラウザ経由で送信します。すべての変数とクエリは私には定義されていません - 'console.log(req.query、senderId、email、hotelName)'出力: '[Function:getQuery] undefined undefined undefined' –

+0

なぜあなたのために働いているのですか?私のために働く! 'resitfy'と衝突することはありますか?また、次のように 'app.js'からこのコードを呼び出します:' var restApi = require( "./ rest_api"); ' –

+0

セッションのクッキーを設定する場所のコードを投稿してください。 – pneedle

-1

要求がクエリで作られるときはいつでも、クエリがそれらを認識するために、サーバー URLに存在している必要があります。

次は、サンプルコードです。 HTMLフォームのアクションにクエリを追加する必要があります。また、&を使用してそれらを区切ります。

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title></title> 
    </head> 
    <body> 
    <form action="/as/?sender=321&[email protected]" method="post"> 
     <input type="text" name="myName" value=""> 
     <input type="submit" name="" value="ssss"> 
    </form> 
    </body> 
</html> 

は、ここでは、我々はすでにでそれらを定義しているので、私は、この目的を尋ねるしようとしている、今app.js

app.post('/bookinghandler', function (req, res) { 

    var senderId = req.query.sender; 
    var email = req.query.email; 
    console.log('senderId = ' + senderId + ' email = ' + email); 
    res.end("got the info"); 
}); 

です。まあ、実際のウェブサイトはそれをしません。クエリを評価する場合は、の空白をにして、ブラウザにCookieがあるかどうかを確認する必要があります。

このHTMLフォームここ

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title></title> 
    </head> 
    <body> 
    <form action="/as/?sender=&email=" method="post"> 
     <input type="text" name="myName" value=""> 
     <input type="submit" name="" value="ssss"> 
    </form> 
    </body> 
</html> 

は、我々のアプリは、クッキーのノードモジュールの詳細情報については

app.post('/bookinghandler', function (req, res) { 
    if(req.session.user.id){ //checking the cookies if the user is logged in/exists 
     var senderId = req.query.sender; 
     var email = req.query.email; 
    }else{ 
    res.send("you haven't logged in"); 
    return false; 
    } 

    console.log('senderId = ' + senderId + ' email = ' + email); 
    res.end("got the info"); 
}); 

ですがhere

結論を参照してください。

フォーム上のクエリはほとんどが余分な作業ですが、req.bodyとクッキーreq.sessionのオブジェクトを使って簡単に作業できます。クライアントとサーバー間で転送する余分なデータがない限り、通常は使用しません。

あなたは

app.get('/bookinghandler/:myParam/?queriesHere='){ 
    console.log(req.params.myParam + " and the query: " + req.query.queriesHere); 

res.send(req.params.myParam + " and the query: " + req.query.queriesHere); 
} 

のparamsたいの使用は、このコードを追加し、コピーして、このURLに行けば

パラメータは、Node.jsの

にこの/:paramのように定義されているUPDATE localhost:5000/bookinghandler/hereisaparam/?queriesHere=123

mそれは、サーバアプリケーションの場合、ポート

を追加し、別のNode.jsのファイルを作成し、サーバーが動作している間、両方の

otherfile.js

var request = require('request'); 
request('http://localhost:5000/bookinghandler/hereisaparam/?queriesHere=123', function (error, response, body) { 
    if(error){ 
console.log(error): 
return false; 
} 
    console.log('body:', body); // Print the data 
}); 

を実行し、このファイルにそれらを実行するAKEてください。

+0

私はWebサイトなどからクエリを送信しません。ブラウザのURLまたはAdvanced RESTクライアント。 URLは単純です: 'localhost:5000/bookinghandler?sender = 100000250242810&email = some @ email.com&hotelName = Grand%20Hotel&confirmNumber = 654321&startDate = 2017-10-11&endDate = 2017-10-15' –

+0

' req.url'は正しいです: '/ bookinghandler?sender = 100000250242810&email = some @ email.com&hotelName = Grand%20Hotel&confirmNumber = 654321&startDate = 2017-10-11&endDate = 2017-10-15'ただし、パラメータは未定義です。 –

+0

あなたはそのURLにパラメータを持たないためです@AlekseyKontsevich – turmuka