服务器使用 twitter api 与 nodejs 和 expressjs 自行关闭

Server shutting down itself using twitter api with nodejs and expressjs

我有一个使用 Twitter 的网络应用 API。主要重点是根据给定的 Twitter 用户名获取未关注的用户。直到此时它工作正常,但是当我因为 Twitter 上不存在用户名而收到错误时,服务器会自行关闭。使用 Nodejs,expressjs.

错误信息:

App is running on port : 3000
[ { code: 34, message: 'Sorry, that page does not exist.' } ]
_http_outgoing.js:494
    throw new Error('Can\'t set headers after they are sent.');
    ^

Error: Can't set headers after they are sent.
    at validateHeader (_http_outgoing.js:494:11)
    at ServerResponse.setHeader (_http_outgoing.js:501:3)
    at ServerResponse.header (/home/ugurcan/dev/Projects/Twitter-App/twitter-api-app/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/home/ugurcan/dev/Projects/Twitter-App/twitter-api-app/node_modules/express/lib/response.js:170:12)
    at /home/ugurcan/dev/Projects/Twitter-App/twitter-api-app/twitter-api.js:30:21
    at Request._callback (/home/ugurcan/dev/Projects/Twitter-App/twitter-api-app/node_modules/twitter/lib/twitter.js:215:14)
    at Request.self.callback (/home/ugurcan/dev/Projects/Twitter-App/twitter-api-app/node_modules/request/request.js:186:22)
    at emitTwo (events.js:126:13)
    at Request.emit (events.js:214:7)
    at Request.<anonymous> (/home/ugurcan/dev/Projects/Twitter-App/twitter-api-app/node_modules/request/request.js:1163:10)

代码中有问题的部分如下。问题是:我怎样才能避免这种情况?或者有可能吗?

client.get('followers/ids', params, function(error, followers_results, response) {
        if (error) {
          res.send("error");
          console.log(error);
        }

         let followers = followers_results.ids;

         client.get('friends/ids', params, function(error, following_results, response ) {
            if (error) {
                res.send("error");
                console.log(error);
            }

            let following = following_results.ids;


            following.forEach(function(person){
                if(followers.indexOf(person) === -1){
                    one_way_following.push(person);
                }
            });

            // console.log(one_way_following);

            one_way_following = one_way_following.slice(0, 100);

            one_way_following_string = one_way_following.join();

           // console.log("----------------------------------------------------");
           // console.log(one_way_following_string);
           // console.log("----------------------------------------------------");

           client.get('users/lookup', {user_id: one_way_following_string}, function(error, user_results, response, next) {
               if (error) {
                   res.send("error");
                   console.log(error);
               }

               user_results.forEach(function(user){
                   let userObject = {
                       name : user.name,
                       screen_name : user.screen_name,
                       avatar: user.profile_image_url
                   }
               //   console.log(user.name);

               users.push(userObject);
               })
               res.render("results.ejs",{users:users});
            //    console.log(users);
           });
       });
   });

这个错误确实发生了,因为你不能多次调用 res.render("results.ejs",{users:users});res.send("error");,因为 headers 一旦设置就无法更改。

最简单的解决方案是一旦发现错误(if (error) { 在第 2 行)就中断该函数,或者适当地处理它(呈现空白,或呈现友好的错误视图)。

有关此的更多信息,请查看此问题的答案,Error: Can't set headers after they are sent to the client

希望对您有所帮助:)