কীভাবে নোড-এক্সপ্রেস সার্ভারটি সঠিকভাবে বন্ধ করবেন?


84

/auth/github/callback ইউআরএল থেকে কলব্যাক পাওয়ার পরে সার্ভারটি বন্ধ করতে হবে । সাধারন এইচটিটিপি এপিআই বন্ধ করার সার্ভারটি বর্তমানে server.close([callback]) এপিআই ফাংশনটির সাথে সমর্থন করে তবে নোড-এক্সপ্রেস সার্ভারের সাথে আমি TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' ত্রুটি পাচ্ছি । এবং আমি এই সমস্যাটি সমাধানের জন্য কীভাবে তথ্য জানব জানি না।
এক্সপ্রেস সার্ভারটি কীভাবে বন্ধ করব?

নোডজেএস কনফিগারেশন নোট:

$ node --version
v0.8.17
$ npm --version
1.2.0
$ npm view express version
3.0.6

আসল অ্যাপ্লিকেশন কোড:

var app = express();

// configure Express
app.configure(function() {
    // … configuration
});

app.get(
    '/auth/github/callback',
    passport.authenticate('github', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/');

        setTimeout(function () {
            app.close();
            // TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close'
        }, 3000)
    }
);

app.listen('http://localhost:5000/');

এছাড়াও, আমি দেখেছি 'nodejs ঘনিষ্ঠ প্রকাশ ...' কিন্তু আমি নিশ্চিত আমি যদি আমি কোড সহ এটি ব্যবহার করতে পারেন না: var app = express();

উত্তর:


115

app.listen()আয় http.Server। আপনার close()উদাহরণস্বরূপ নয়, এই appদৃষ্টিতে প্রার্থনা করা উচিত ।

প্রাক্তন

app.get(
    '/auth/github/callback',
    passport.authenticate('github', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/');

        setTimeout(function () {
            server.close();
            // ^^^^^^^^^^^
        }, 3000)
    }
);

var server = app.listen('http://localhost:5000/');

আপনি সূত্রগুলি পরিদর্শন করতে পারেন: /node_modules/express/lib/application.js


4
আশ্চর্যের বিষয়, আমি কোনও রুট অ্যাক্সেস করলে এটি বন্ধ হচ্ছে না।
উদয় হিওরালে

4
@ উদয়, আমি এটিও অভিজ্ঞতা পেয়েছি। আমি জানতে পেরেছিলাম যে আমার ব্রাউজারে একটি HTTP1.1 স্ট্রাইস্ট সংযোগ খোলা ছিল, তাই যখন আমি এফ 5 টিপলাম তখন এটি উপস্থিত হয়েছিল যেন সার্ভারটি বন্ধ হয়নি। আপনি যদি অন্য কোনও ব্রাউজার চেষ্টা করেন তবে দেখতে পাবেন সার্ভারের সকেট চলছে না।
রিক ভেল্ড

এটি আমার ভুল ছিল, আমি appপরিবর্তে ডাকছিলাম server। আমার দিন বাঁচিয়েছে অনেক ধন্যবাদ 👍
এডিসন স্পেন্সার

48

এক্সপ্রেস ভি 3 এ তারা এই ফাংশনটি সরিয়ে দিয়েছে।

আপনি এখনও app.listen()ফাংশন ফলাফল নির্ধারিত করে এটি অর্জন করতে পারেন এবং এটিতে বন্ধ প্রয়োগ করতে পারেন:

var server = app.listen(3000);
server.close()

https://github.com/visionmedia/express/issues/1366


অবিচ্ছিন্ন সংযোগ বা প্রতিক্রিয়া তৈরি না করার ক্ষেত্রে অনুরোধ থাকলে ক্ষেত্রে সার্ভারের সমাপ্তি নিশ্চিত করতে github.com/gajus/http-terminator এর মতো কিছু ব্যবহার করুন ।
গজুস

সংক্ষিপ্ত এবং সাধারণ
কৃপেশ আনাদকাত

4

যদি আপনার এক্সপ্রেস অ্যাপ্লিকেশনটিতে কোনও ত্রুটি দেখা দেয় তবে আপনাকে অবশ্যই সার্ভারটি বন্ধ করতে হবে এবং আপনি নীচের মতো এটি করতে পারেন-

var app = express();
var server = app.listen(process.env.PORT || 5000)

যদি কোনও ত্রুটি দেখা দেয় তবে আমাদের অ্যাপ্লিকেশন নামের একটি সংকেত পাবে SIGTERM

আপনি নোড সিগন্যাল সম্পর্কে এখানে আরও পড়তে পারেন-

https://www.gnu.org/software/libc/manual/html_node/ সংক্ষিপ্ততা- সিগন্যালস html

process.on('SIGTERM', () => {
  console.info('SIGTERM signal received.');
  console.log('Closing http server.');
  server.close(() => {
    console.log('Http server closed.');
  });
});

দুঃখিত, এটি প্রাসঙ্গিক নয়। প্রশ্ন ম্যানুয়াল সার্ভার শাটডাউন সম্পর্কে এবং ত্রুটি পরিচালনার বিষয়ে নয়
ভ্লাদিমির স্টারকভ

1

আমি "এইচটিটিপি সার্ভারটি কীভাবে শেষ করব" এর ভিন্নতার উত্তর বিভিন্নভাবে দিয়েছি সমর্থন চ্যানেল। দুর্ভাগ্যক্রমে, আমি বিদ্যমান লাইব্রেরিগুলির একটিরও সুপারিশ করতে পারিনি কারণ সেগুলির এক বা অন্য উপায়ে অভাব রয়েছে। আমি তখন থেকে একটি প্যাকেজ একসাথে রেখেছি যা (আমি বিশ্বাস করি) ক্রেফুল এক্সপ্রেস.জেস এইচটিটিপি (এস) সার্ভার সমাপ্তির প্রত্যাশিত সমস্ত মামলা পরিচালনা করছে।

https://github.com/gajus/http-terminator

এইচটিপি-টার্মিনেটরের প্রধান সুবিধা হ'ল:

  • এটি নোড.জেএসআইপি বানর-প্যাচ দেয় না
  • এটি সংযুক্ত HTTP অনুরোধ ব্যতীত সমস্ত সকেট তত্ক্ষণাত ধ্বংস করে
  • এটি চলমান এইচটিটিপি অনুরোধের সাথে সকেটগুলিকে সুদৃশ্য সময়সীমার অনুমতি দেয়
  • এটি HTTPS সংযোগগুলি সঠিকভাবে পরিচালনা করে
  • এটি সংযুক্ত রাখুন ব্যবহার করে সংযোগকে অবহিত করে যে সংযোগটি সেট করে সার্ভারটি বন্ধ হচ্ছে: বন্ধ শিরোনাম
  • এটি নোড.জেএস প্রক্রিয়াটি শেষ করে না

উত্তরের জন্য আপনাকে ধন্যবাদ, তবে এই প্রশ্নটি 7 বছরের পুরানো
ভ্লাদিমির স্টারকভ

7
এটি একটি বৈধ প্রশ্ন রয়ে গেছে।
গাজুস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.